Archived
0

fix Kick packet handle

This commit is contained in:
2018-04-21 10:27:07 +03:00
parent ba406cfe77
commit 0b90304115
4 changed files with 30 additions and 6 deletions

View File

@@ -4,6 +4,7 @@
*/
package mc.core.embedded;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import mc.core.Config;
import mc.core.Player;
@@ -19,6 +20,8 @@ import java.util.List;
public class InMemoryPlayerManager implements PlayerManager, Runnable {
private List<Player> players;
private final Object lock = new Object();
@Setter
private int keepAliveInterval = 1;
@Autowired
public InMemoryPlayerManager(Config config) {
@@ -32,6 +35,7 @@ public class InMemoryPlayerManager implements PlayerManager, Runnable {
synchronized (lock) {
players.add(player);
lock.notify();
log.info("Player \"{}\" join server", player.getName());
}
}
@@ -54,6 +58,7 @@ public class InMemoryPlayerManager implements PlayerManager, Runnable {
@Override
public void removePlayer(Player player) {
players.remove(player);
log.info("Player \"{}\" left server", player.getName());
}
@Override
@@ -79,7 +84,7 @@ public class InMemoryPlayerManager implements PlayerManager, Runnable {
.forEach(player -> player.getChannel().sendKeepAlive());
try {
Thread.sleep(1);
Thread.sleep(keepAliveInterval);
} catch (InterruptedException e) {
return;
}

View File

@@ -36,7 +36,10 @@ public class PacketHandler extends SimpleChannelInboundHandler<CSPacket> {
@Override
public void channelInactive(ChannelHandlerContext context) throws Exception {
super.channelInactive(context);
playerManager.removePlayer(context.channel().attr(ATTR_PLAYER).get());
Player player = context.channel().attr(ATTR_PLAYER).get();
if (player != null) {
playerManager.removePlayer(player);
}
}
@Override
@@ -157,4 +160,10 @@ public class PacketHandler extends SimpleChannelInboundHandler<CSPacket> {
channel.attr(ATTR_PLAYER).set(player);
channel.flush();
}
public void onKickPacket(Channel channel, KickPacket packet) {
if (packet.getReason().equals("Quitting")) {
channel.disconnect();
}
}
}

View File

@@ -4,15 +4,15 @@
*/
package mc.core.network.proto_125.packets;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
import mc.core.network.CSPacket;
import mc.core.network.NetStream;
import mc.core.network.SCPacket;
import mc.core.network.proto_125.ByteArrayOutputNetStream;
@Getter
@Slf4j
@Setter
@ToString
public class KickPacket implements SCPacket, CSPacket {
@@ -22,9 +22,17 @@ public class KickPacket implements SCPacket, CSPacket {
reason = String.format("%s§%d§%d", description, online, maxOnline);
}
public String getReason() {
return (reason == null ? "" : reason);
}
@Override
public void readSelf(NetStream netStream) {
try {
reason = netStream.readString();
} catch (NegativeArraySizeException e) {
log.warn("Invalid packet");
}
}
@Override

View File

@@ -11,7 +11,9 @@
<property name="faviconBase64" value="icon.png"/>
</bean>
<bean id="playerManager" class="mc.core.embedded.InMemoryPlayerManager"/>
<bean id="playerManager" class="mc.core.embedded.InMemoryPlayerManager">
<property name="keepAliveInterval" value="10"/>
</bean>
<!-- Netty Server -->
<bean id="pipeline.log" class="io.netty.handler.logging.LoggingHandler" scope="prototype"/>