diff --git a/Mage.Network/src/main/java/org/mage/network/Client.java b/Mage.Network/src/main/java/org/mage/network/Client.java index f67e7fce48a..f7b4ac9d101 100644 --- a/Mage.Network/src/main/java/org/mage/network/Client.java +++ b/Mage.Network/src/main/java/org/mage/network/Client.java @@ -33,7 +33,7 @@ import mage.view.TournamentView; import mage.view.UserDataView; import mage.view.UserView; import org.apache.log4j.Logger; -import org.mage.network.handlers.ExceptionHandler; +import org.mage.network.handlers.client.ClientExceptionHandler; import org.mage.network.handlers.PingMessageHandler; import org.mage.network.handlers.client.ClientMessageHandler; import org.mage.network.handlers.client.ClientRegisteredMessageHandler; @@ -57,7 +57,7 @@ public class Client { private final ClientMessageHandler clientMessageHandler; private final ClientRegisteredMessageHandler clientRegisteredMessageHandler; - private final ExceptionHandler exceptionHandler; + private final ClientExceptionHandler exceptionHandler; private SslContext sslCtx; private Channel channel; @@ -72,7 +72,7 @@ public class Client { clientMessageHandler = new ClientMessageHandler(client); clientRegisteredMessageHandler = new ClientRegisteredMessageHandler(); - exceptionHandler = new ExceptionHandler(); + exceptionHandler = new ClientExceptionHandler(this); } public boolean connect(Connection connection, MageVersion version) { diff --git a/Mage.Network/src/main/java/org/mage/network/Server.java b/Mage.Network/src/main/java/org/mage/network/Server.java index 474c6f0198d..9829bcbc21e 100644 --- a/Mage.Network/src/main/java/org/mage/network/Server.java +++ b/Mage.Network/src/main/java/org/mage/network/Server.java @@ -36,15 +36,14 @@ import mage.view.GameEndView; import mage.view.GameView; import mage.view.UserRequestMessage; import org.apache.log4j.Logger; -import org.mage.network.handlers.ExceptionHandler; import org.mage.network.handlers.PingMessageHandler; import org.mage.network.handlers.WriteListener; import org.mage.network.handlers.server.ConnectionHandler; import org.mage.network.handlers.server.HeartbeatHandler; +import org.mage.network.handlers.server.ServerExceptionHandler; import org.mage.network.handlers.server.ServerRequestHandler; import org.mage.network.interfaces.MageServer; import org.mage.network.messages.MessageType; -import org.mage.network.messages.PingMessage; import org.mage.network.messages.callback.ChatMessageCallback; import org.mage.network.messages.callback.ConstructCallback; import org.mage.network.messages.callback.DraftInitCallback; @@ -87,7 +86,7 @@ public class Server { private static final int IDLE_PING_TIME = 30; private static final int IDLE_TIMEOUT = 60; - private static final PingMessage ping = new PingMessage(); +// private static final PingMessage ping = new PingMessage(); public static final ChannelGroup clients = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE); @@ -99,13 +98,13 @@ public class Server { private final EventExecutorGroup handlersExecutor = new DefaultEventExecutorGroup(Runtime.getRuntime().availableProcessors() * 2); private final ServerRequestHandler serverMessageHandler; - private final ExceptionHandler exceptionHandler; + private final ServerExceptionHandler exceptionHandler; public Server(MageServer server) { this.server = server; // h = new MessageHandler(); serverMessageHandler = new ServerRequestHandler(server); - exceptionHandler = new ExceptionHandler(); + exceptionHandler = new ServerExceptionHandler(server); } public void start(int port, boolean ssl) throws Exception { diff --git a/Mage.Network/src/main/java/org/mage/network/handlers/ExceptionHandler.java b/Mage.Network/src/main/java/org/mage/network/handlers/ExceptionHandler.java deleted file mode 100644 index 18c47b77bd2..00000000000 --- a/Mage.Network/src/main/java/org/mage/network/handlers/ExceptionHandler.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.mage.network.handlers; - -import io.netty.channel.ChannelHandler.Sharable; -import io.netty.channel.ChannelHandlerAdapter; -import io.netty.channel.ChannelHandlerContext; -import org.apache.log4j.Logger; - -/** - * - * @author BetaSteward - */ -@Sharable -public class ExceptionHandler extends ChannelHandlerAdapter { - - private static final Logger logger = Logger.getLogger(ExceptionHandler.class); - - @Override - public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { - logger.error("Communications error", cause); - ctx.close(); - } - -} diff --git a/Mage.Network/src/main/java/org/mage/network/handlers/client/ClientExceptionHandler.java b/Mage.Network/src/main/java/org/mage/network/handlers/client/ClientExceptionHandler.java new file mode 100644 index 00000000000..275c1ea26f8 --- /dev/null +++ b/Mage.Network/src/main/java/org/mage/network/handlers/client/ClientExceptionHandler.java @@ -0,0 +1,31 @@ +package org.mage.network.handlers.client; + +import io.netty.channel.ChannelHandler.Sharable; +import io.netty.channel.ChannelHandlerAdapter; +import io.netty.channel.ChannelHandlerContext; +import org.apache.log4j.Logger; +import org.mage.network.Client; + +/** + * + * @author BetaSteward + */ +@Sharable +public class ClientExceptionHandler extends ChannelHandlerAdapter { + + private static final Logger logger = Logger.getLogger(ClientExceptionHandler.class); + + private Client client; + + public ClientExceptionHandler(Client client) { + this.client = client; + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { + logger.error("Communications error", cause); + client.disconnect(true); + //ctx.close(); + } + +} diff --git a/Mage.Network/src/main/java/org/mage/network/handlers/server/ConnectionHandler.java b/Mage.Network/src/main/java/org/mage/network/handlers/server/ConnectionHandler.java index c13e1acdbc5..05fcab02cd3 100644 --- a/Mage.Network/src/main/java/org/mage/network/handlers/server/ConnectionHandler.java +++ b/Mage.Network/src/main/java/org/mage/network/handlers/server/ConnectionHandler.java @@ -2,7 +2,6 @@ package org.mage.network.handlers.server; import io.netty.channel.ChannelHandlerAdapter; import io.netty.channel.ChannelHandlerContext; -import org.apache.log4j.Logger; import org.mage.network.Server; /** @@ -11,7 +10,7 @@ import org.mage.network.Server; */ public class ConnectionHandler extends ChannelHandlerAdapter { - private static final Logger logger = Logger.getLogger(ConnectionHandler.class); +// private static final Logger logger = Logger.getLogger(ConnectionHandler.class); @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { @@ -19,10 +18,10 @@ public class ConnectionHandler extends ChannelHandlerAdapter { super.channelActive(ctx); } - @Override - public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { - logger.error("Communications error", cause); - ctx.close(); - } +// @Override +// public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { +// logger.error("Communications error", cause); +// ctx.close(); +// } } diff --git a/Mage.Network/src/main/java/org/mage/network/handlers/server/ServerExceptionHandler.java b/Mage.Network/src/main/java/org/mage/network/handlers/server/ServerExceptionHandler.java new file mode 100644 index 00000000000..656f90dadcd --- /dev/null +++ b/Mage.Network/src/main/java/org/mage/network/handlers/server/ServerExceptionHandler.java @@ -0,0 +1,32 @@ +package org.mage.network.handlers.server; + +import io.netty.channel.ChannelHandler.Sharable; +import io.netty.channel.ChannelHandlerAdapter; +import io.netty.channel.ChannelHandlerContext; +import mage.remote.DisconnectReason; +import org.apache.log4j.Logger; +import org.mage.network.interfaces.MageServer; + +/** + * + * @author BetaSteward + */ +@Sharable +public class ServerExceptionHandler extends ChannelHandlerAdapter { + + private static final Logger logger = Logger.getLogger(ServerExceptionHandler.class); + + private MageServer server; + + public ServerExceptionHandler(MageServer server) { + this.server = server; + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { + logger.error("Communications error", cause); + server.disconnect(ctx.channel().id().asLongText(), DisconnectReason.Undefined); + //ctx.close(); + } + +} diff --git a/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java b/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java index 7a2d2601e6f..f64c7a6e8a7 100644 --- a/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java +++ b/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java @@ -112,10 +112,12 @@ public class GamesRoomImpl extends RoomImpl implements GamesRoom, Serializable { } } List users = new ArrayList<>(); + String pingInfo; for (User user : UserManager.getInstance().getUsers()) { Session session = SessionManager.getInstance().getSession(user.getSessionId()); + pingInfo = session == null ? "" : session.getPingInfo(); try { - users.add(new UsersView(user.getUserData().getFlagName(), user.getName(), user.getInfo(), user.getGameInfo(), session.getPingInfo())); + users.add(new UsersView(user.getUserData().getFlagName(), user.getName(), user.getInfo(), user.getGameInfo(), pingInfo)); } catch (Exception ex) { logger.fatal("User update exception: " + user.getName() + " - " + ex.toString(), ex); users.add(new UsersView( @@ -123,7 +125,7 @@ public class GamesRoomImpl extends RoomImpl implements GamesRoom, Serializable { user.getName() != null ? user.getName() : "", user.getInfo() != null ? user.getInfo() : "", "[exception]", - session.getPingInfo() != null ? session.getPingInfo() : "")); + pingInfo)); } }