From 0b903041153abdb104f186719f1879b88a76c8b0 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Sat, 21 Apr 2018 10:27:07 +0300 Subject: [PATCH] fix Kick packet handle --- .../mc/core/embedded/InMemoryPlayerManager.java | 7 ++++++- .../network/proto_125/netty/PacketHandler.java | 11 ++++++++++- .../core/network/proto_125/packets/KickPacket.java | 14 +++++++++++--- src/main/resources/spring.xml | 4 +++- 4 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/main/java/mc/core/embedded/InMemoryPlayerManager.java b/src/main/java/mc/core/embedded/InMemoryPlayerManager.java index 7c94ba1..3b912b1 100644 --- a/src/main/java/mc/core/embedded/InMemoryPlayerManager.java +++ b/src/main/java/mc/core/embedded/InMemoryPlayerManager.java @@ -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 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; } diff --git a/src/main/java/mc/core/network/proto_125/netty/PacketHandler.java b/src/main/java/mc/core/network/proto_125/netty/PacketHandler.java index 04d31db..f29d955 100644 --- a/src/main/java/mc/core/network/proto_125/netty/PacketHandler.java +++ b/src/main/java/mc/core/network/proto_125/netty/PacketHandler.java @@ -36,7 +36,10 @@ public class PacketHandler extends SimpleChannelInboundHandler { @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 { channel.attr(ATTR_PLAYER).set(player); channel.flush(); } + + public void onKickPacket(Channel channel, KickPacket packet) { + if (packet.getReason().equals("Quitting")) { + channel.disconnect(); + } + } } diff --git a/src/main/java/mc/core/network/proto_125/packets/KickPacket.java b/src/main/java/mc/core/network/proto_125/packets/KickPacket.java index 826b9b4..f843962 100644 --- a/src/main/java/mc/core/network/proto_125/packets/KickPacket.java +++ b/src/main/java/mc/core/network/proto_125/packets/KickPacket.java @@ -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) { - reason = netStream.readString(); + try { + reason = netStream.readString(); + } catch (NegativeArraySizeException e) { + log.warn("Invalid packet"); + } } @Override diff --git a/src/main/resources/spring.xml b/src/main/resources/spring.xml index 949de13..4d377ca 100644 --- a/src/main/resources/spring.xml +++ b/src/main/resources/spring.xml @@ -11,7 +11,9 @@ - + + +