diff --git a/gameserver/src/main/java/brainwine/gameserver/entity/player/Player.java b/gameserver/src/main/java/brainwine/gameserver/entity/player/Player.java index 6299cd3..fd6a5c5 100644 --- a/gameserver/src/main/java/brainwine/gameserver/entity/player/Player.java +++ b/gameserver/src/main/java/brainwine/gameserver/entity/player/Player.java @@ -213,8 +213,10 @@ public class Player extends Entity implements CommandExecutor { if(zone != null) { zone.removePlayer(this); activeChunks.clear(); - dialogs.clear(); } + + dialogs.clear(); + connection = null; } /** diff --git a/gameserver/src/main/java/brainwine/gameserver/server/pipeline/Connection.java b/gameserver/src/main/java/brainwine/gameserver/server/pipeline/Connection.java index 13cf26c..e077f85 100644 --- a/gameserver/src/main/java/brainwine/gameserver/server/pipeline/Connection.java +++ b/gameserver/src/main/java/brainwine/gameserver/server/pipeline/Connection.java @@ -39,6 +39,8 @@ public class Connection extends SimpleChannelInboundHandler { @Override public void channelInactive(ChannelHandlerContext ctx) throws Exception { + kick("Connection terminated"); + if(player == null) { return; } @@ -67,8 +69,9 @@ public class Connection extends SimpleChannelInboundHandler { return; } - logger.warn(cause.getMessage()); - // log warn, kick connection. + String error = cause.getMessage(); + logger.warn(error); + //kick(error); } public ChannelFuture sendMessage(Message message) { @@ -86,7 +89,9 @@ public class Connection extends SimpleChannelInboundHandler { } public void kick(String reason, boolean shouldReconnect) { - sendMessage(new KickMessage(reason, shouldReconnect)).addListener(ChannelFutureListener.CLOSE); + if(isOpen()) { + sendMessage(new KickMessage(reason, shouldReconnect)).addListener(ChannelFutureListener.CLOSE); + } } public void setPlayer(Player player) {