mirror of
https://github.com/magefree/mage.git
synced 2025-12-24 12:31:59 -08:00
improved disconnect handling
This commit is contained in:
parent
8bff961caf
commit
9be04769f9
7 changed files with 80 additions and 40 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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();
|
||||
// }
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -112,10 +112,12 @@ public class GamesRoomImpl extends RoomImpl implements GamesRoom, Serializable {
|
|||
}
|
||||
}
|
||||
List<UsersView> users = new ArrayList<>();
|
||||
String pingInfo;
|
||||
for (User user : UserManager.getInstance().getUsers()) {
|
||||
Session session = SessionManager.getInstance().getSession(user.getSessionId());
|
||||
pingInfo = session == null ? "<no ping>" : 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() : "<no name>",
|
||||
user.getInfo() != null ? user.getInfo() : "<no info>",
|
||||
"[exception]",
|
||||
session.getPingInfo() != null ? session.getPingInfo() : "<no ping>"));
|
||||
pingInfo));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue