From 4db11619988974736294372e3a0320f1eee6a2ae Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Mon, 5 Jun 2017 11:10:26 +0300 Subject: [PATCH] =?UTF-8?q?MCSM:=20=D0=A1=D0=BE=D1=85=D1=80=D0=B0=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=B0=D0=BD=D0=B0=D0=BB=D0=BE?= =?UTF-8?q?=D0=B2=20=D1=81=D0=B2=D1=8F=D0=B7=D0=B8=20=D1=81=20=D1=81=D0=B5?= =?UTF-8?q?=D1=80=D0=B2=D0=B5=D1=80=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/asys/mcsmanager/Manager.java | 10 +++++++++- .../asys/mcsmanager/server/ServerPacketHandler.java | 8 +++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/mcserver-manager/src/main/java/asys/mcsmanager/Manager.java b/mcserver-manager/src/main/java/asys/mcsmanager/Manager.java index 5d6f6d5..032af85 100644 --- a/mcserver-manager/src/main/java/asys/mcsmanager/Manager.java +++ b/mcserver-manager/src/main/java/asys/mcsmanager/Manager.java @@ -16,6 +16,7 @@ import java.util.*; public class Manager { private Logger logger = LoggerFactory.getLogger(Manager.class); private Map serversMap = new HashMap<>(); + private Map serverChannels = new HashMap<>(); private List webconsoleListener = new ArrayList<>(); /** @@ -23,16 +24,23 @@ public class Manager { * @param clientId id сервера. Чувствителен к регистру * @return false, если сервер с таким id уже имеется */ - public boolean addClientId(String clientId) { + public boolean addClientId(String clientId, Channel channel) { if (serversMap.containsKey(clientId)) { return false; } logger.debug("addClientId: {}", clientId); serversMap.put(clientId, new ServerInfo(clientId)); + serverChannels.put(clientId, channel); return true; } + public void removeClientId(String clientId) { + if (clientId != null) { + serverChannels.remove(clientId); + } + } + /** * Дополнить информация о сервере. * Если сервер отсутствует в списке, информация будет потеряна. diff --git a/mcserver-manager/src/main/java/asys/mcsmanager/server/ServerPacketHandler.java b/mcserver-manager/src/main/java/asys/mcsmanager/server/ServerPacketHandler.java index 2568af2..fa25259 100644 --- a/mcserver-manager/src/main/java/asys/mcsmanager/server/ServerPacketHandler.java +++ b/mcserver-manager/src/main/java/asys/mcsmanager/server/ServerPacketHandler.java @@ -55,6 +55,12 @@ class ServerPacketHandler extends ChannelInboundHandlerAdapter implements IPacke super.channelActive(context); } + @Override + public void channelInactive(ChannelHandlerContext context) throws Exception { + manager.removeClientId(context.channel().attr(CLIENTID).get()); + super.channelInactive(context); + } + @Override public void handle(Packet packet, ChannelHandlerContext context) { if (packet.getClass() == CS_Handshake.class) { @@ -76,7 +82,7 @@ class ServerPacketHandler extends ChannelInboundHandlerAdapter implements IPacke return; } - if (!manager.addClientId(packet.getClientId())) { + if (!manager.addClientId(packet.getClientId(), context.channel())) { try { context.channel().writeAndFlush(HandshakeResult.CLIENTID_EXISTS).sync().channel().close(); } catch (InterruptedException ignore) {