Archived
0

MCSM: Сохранение каналов связи с серверами

This commit is contained in:
2017-06-05 11:10:26 +03:00
parent 3e3b0d3602
commit 4db1161998
2 changed files with 16 additions and 2 deletions

View File

@@ -16,6 +16,7 @@ import java.util.*;
public class Manager { public class Manager {
private Logger logger = LoggerFactory.getLogger(Manager.class); private Logger logger = LoggerFactory.getLogger(Manager.class);
private Map<String, ServerInfo> serversMap = new HashMap<>(); private Map<String, ServerInfo> serversMap = new HashMap<>();
private Map<String, Channel> serverChannels = new HashMap<>();
private List<Channel> webconsoleListener = new ArrayList<>(); private List<Channel> webconsoleListener = new ArrayList<>();
/** /**
@@ -23,16 +24,23 @@ public class Manager {
* @param clientId id сервера. Чувствителен к регистру * @param clientId id сервера. Чувствителен к регистру
* @return <code>false</code>, если сервер с таким id уже имеется * @return <code>false</code>, если сервер с таким id уже имеется
*/ */
public boolean addClientId(String clientId) { public boolean addClientId(String clientId, Channel channel) {
if (serversMap.containsKey(clientId)) { if (serversMap.containsKey(clientId)) {
return false; return false;
} }
logger.debug("addClientId: {}", clientId); logger.debug("addClientId: {}", clientId);
serversMap.put(clientId, new ServerInfo(clientId)); serversMap.put(clientId, new ServerInfo(clientId));
serverChannels.put(clientId, channel);
return true; return true;
} }
public void removeClientId(String clientId) {
if (clientId != null) {
serverChannels.remove(clientId);
}
}
/** /**
* Дополнить информация о сервере. * Дополнить информация о сервере.
* Если сервер отсутствует в списке, информация будет потеряна. * Если сервер отсутствует в списке, информация будет потеряна.

View File

@@ -55,6 +55,12 @@ class ServerPacketHandler extends ChannelInboundHandlerAdapter implements IPacke
super.channelActive(context); super.channelActive(context);
} }
@Override
public void channelInactive(ChannelHandlerContext context) throws Exception {
manager.removeClientId(context.channel().attr(CLIENTID).get());
super.channelInactive(context);
}
@Override @Override
public void handle(Packet packet, ChannelHandlerContext context) { public void handle(Packet packet, ChannelHandlerContext context) {
if (packet.getClass() == CS_Handshake.class) { if (packet.getClass() == CS_Handshake.class) {
@@ -76,7 +82,7 @@ class ServerPacketHandler extends ChannelInboundHandlerAdapter implements IPacke
return; return;
} }
if (!manager.addClientId(packet.getClientId())) { if (!manager.addClientId(packet.getClientId(), context.channel())) {
try { try {
context.channel().writeAndFlush(HandshakeResult.CLIENTID_EXISTS).sync().channel().close(); context.channel().writeAndFlush(HandshakeResult.CLIENTID_EXISTS).sync().channel().close();
} catch (InterruptedException ignore) { } catch (InterruptedException ignore) {