diff --git a/Mage.Client/src/main/java/mage/client/MageFrame.java b/Mage.Client/src/main/java/mage/client/MageFrame.java index 789bdf5b005..6e5beb4e663 100644 --- a/Mage.Client/src/main/java/mage/client/MageFrame.java +++ b/Mage.Client/src/main/java/mage/client/MageFrame.java @@ -554,6 +554,10 @@ public class MageFrame extends javax.swing.JFrame implements MageClient { return session.connect(connection); } + public static boolean stopConnecting() { + return session.stopConnecting(); + } + public boolean autoConnect() { boolean autoConnect = Boolean.parseBoolean(prefs.get("autoConnect", "false")); if (autoConnect) { diff --git a/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java b/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java index cbddf9a970a..710e31d08e5 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java @@ -322,7 +322,6 @@ public class ConnectDialog extends MageDialog { try { get(); setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); - btnConnect.setEnabled(true); if (result) { lblStatus.setText(""); connected(); @@ -334,7 +333,13 @@ public class ConnectDialog extends MageDialog { logger.fatal("Update Players Task error", ex); } catch (ExecutionException ex) { logger.fatal("Update Players Task error", ex); - } catch (CancellationException ex) {} + } catch (CancellationException ex) { + logger.info("Connect was canceled"); + lblStatus.setText("Connect was canceled"); + MageFrame.stopConnecting(); + } finally { + btnConnect.setEnabled(true); + } } } diff --git a/Mage.Common/src/mage/remote/Session.java b/Mage.Common/src/mage/remote/Session.java index 20b6ed3f9dd..e01d307af4e 100644 --- a/Mage.Common/src/mage/remote/Session.java +++ b/Mage.Common/src/mage/remote/Session.java @@ -78,6 +78,7 @@ public class Session { private Connection connection; private static boolean debugMode = false; + private boolean canceled = false; static { debugMode = System.getProperty("debug.mage") != null; @@ -92,9 +93,15 @@ public class Session { disconnect(true); } this.connection = connection; + this.canceled = false; return connect(); } + public boolean stopConnecting() { + canceled = true; + return true; + } + public boolean connect() { sessionState = SessionState.CONNECTING; try { @@ -141,7 +148,7 @@ public class Session { listenerMetadata.put(ConnectionValidator.VALIDATOR_PING_TIMEOUT, "9000"); } callbackClient.connect(new ClientConnectionListener(), listenerMetadata); - + Map callbackMetadata = new HashMap(); callbackMetadata.put(Bisocket.IS_CALLBACK_SERVER, "true"); CallbackHandler callbackHandler = new CallbackHandler(); @@ -171,12 +178,16 @@ public class Session { logger.fatal("", ex); client.showMessage("Unable to connect to server. " + ex.getMessage()); } catch (MageVersionException ex) { - client.showMessage("Unable to connect to server. " + ex.getMessage()); + if (!canceled) { + client.showMessage("Unable to connect to server. " + ex.getMessage()); + } // TODO: download client that matches server version } catch (Throwable t) { logger.fatal("Unable to connect to server - ", t); - disconnect(false); - client.showMessage("Unable to connect to server. " + t.getMessage()); + if (!canceled) { + disconnect(false); + client.showMessage("Unable to connect to server. " + t.getMessage()); + } } return false; } @@ -187,7 +198,6 @@ public class Session { if (connection == null) return; try { - callbackClient.disconnect(); TransporterClient.destroyTransporterClient(server); } catch (Throwable ex) {