improved handling of disconnects

This commit is contained in:
betasteward 2015-06-01 14:58:26 -04:00
parent 481e177d71
commit 20a25ffdab
3 changed files with 35 additions and 1 deletions

View file

@ -98,6 +98,7 @@ public class ConnectDialog extends MageDialog {
this.txtUserName.setText(MageFrame.getPreferences().get("userName", ""));
this.chkAutoConnect.setSelected(Boolean.parseBoolean(MageFrame.getPreferences().get("autoConnect", "false")));
this.chkForceUpdateDB.setSelected(false); // has always to be set manually to force comparison
this.lblStatus.setText("");
this.setModal(true);
this.setLocation(50, 50);
this.setVisible(true);
@ -366,7 +367,6 @@ public class ConnectDialog extends MageDialog {
if (result) {
lblStatus.setText("");
connected();
// MageFrame.getInstance().showGames(false);
} else {
lblStatus.setText("Could not connect");
}
@ -374,11 +374,13 @@ public class ConnectDialog extends MageDialog {
logger.fatal("Update Players Task error", ex);
} catch (ExecutionException ex) {
logger.fatal("Update Players Task error", ex);
lblStatus.setText("Could not connect. Server not available.");
} catch (CancellationException ex) {
logger.info("Connect was canceled");
lblStatus.setText("Connect was canceled");
} catch (TimeoutException ex) {
logger.fatal("Connection timeout: ", ex);
lblStatus.setText("Could not connect");
} finally {
// MageFrame.stopConnecting();
btnConnect.setEnabled(true);

View file

@ -39,6 +39,7 @@ import org.mage.network.handlers.PingMessageHandler;
import org.mage.network.handlers.client.ChatMessageHandler;
import org.mage.network.handlers.client.ChatRoomHandler;
import org.mage.network.handlers.client.ClientRegisteredMessageHandler;
import org.mage.network.handlers.client.ConnectionHandler;
import org.mage.network.handlers.client.InformClientMessageHandler;
import org.mage.network.handlers.client.ServerMessageHandler;
import org.mage.network.handlers.client.RoomMessageHandler;
@ -58,6 +59,7 @@ public class Client {
private final MageClient client;
// private final MessageHandler h;
private final ConnectionHandler connectionHandler;
private final ChatRoomHandler chatRoomHandler;
private final ChatMessageHandler chatMessageHandler;
private final InformClientMessageHandler informClientMessageHandler;
@ -75,6 +77,7 @@ public class Client {
public Client(MageClient client) {
this.client = client;
// h = new MessageHandler();
connectionHandler = new ConnectionHandler(client);
chatRoomHandler = new ChatRoomHandler();
chatMessageHandler = new ChatMessageHandler(client);
informClientMessageHandler = new InformClientMessageHandler(client);
@ -126,6 +129,7 @@ public class Client {
ch.pipeline().addLast(new ObjectDecoder(ClassResolvers.cacheDisabled(null)));
ch.pipeline().addLast(new ObjectEncoder());
ch.pipeline().addLast("connectionHandler", connectionHandler);
ch.pipeline().addLast("idleStateHandler", new IdleStateHandler(IDLE_TIMEOUT, IDLE_PING_TIME, 0));
ch.pipeline().addLast("heartbeatHandler", new HeartbeatHandler());
ch.pipeline().addLast("pingMessageHandler", new PingMessageHandler());

View file

@ -0,0 +1,28 @@
package org.mage.network.handlers.client;
import io.netty.channel.ChannelHandlerAdapter;
import io.netty.channel.ChannelHandlerContext;
import org.apache.log4j.Logger;
import org.mage.network.interfaces.MageClient;
import org.mage.network.model.MessageType;
/**
*
* @author BetaSteward
*/
public class ConnectionHandler extends ChannelHandlerAdapter {
private static final Logger logger = Logger.getLogger(ConnectionHandler.class);
private final MageClient client;
public ConnectionHandler (MageClient client) {
this.client = client;
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
logger.error("Connection error", cause);
client.disconnected(true);
}
}