MCSM: Сохранение каналов связи с серверами
This commit is contained in:
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Дополнить информация о сервере.
|
* Дополнить информация о сервере.
|
||||||
* Если сервер отсутствует в списке, информация будет потеряна.
|
* Если сервер отсутствует в списке, информация будет потеряна.
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user