From f81142459dd745115f8778ea1efd44fd9f87c678 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Fri, 12 Apr 2019 12:15:48 +0400 Subject: [PATCH] * UI: fixed wrong server reconnect on multiple apps runs (#5495); --- .../src/main/java/mage/client/MageFrame.java | 13 ++++----- .../mage/client/dialog/ConnectDialog.java | 3 ++ .../client/preference/MagePreferences.java | 29 ++++++++++++++++++- .../main/java/mage/interfaces/MageClient.java | 4 +-- .../org/mage/test/load/SimpleMageClient.java | 9 +++--- 5 files changed, 43 insertions(+), 15 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/MageFrame.java b/Mage.Client/src/main/java/mage/client/MageFrame.java index 4101a310201..6f365dfb575 100644 --- a/Mage.Client/src/main/java/mage/client/MageFrame.java +++ b/Mage.Client/src/main/java/mage/client/MageFrame.java @@ -246,8 +246,7 @@ public class MageFrame extends javax.swing.JFrame implements MageClient { SessionHandler.startSession(this); callbackClient = new CallbackClientImpl(this); connectDialog = new ConnectDialog(); - try - { + try { whatsNewDialog = new WhatsNewDialog(); } catch (NoClassDefFoundError e) { // JavaFX is not supported on old MacOS with OpenJDK @@ -760,10 +759,10 @@ public class MageFrame extends javax.swing.JFrame implements MageClient { private boolean performConnect(boolean reconnect) { if (currentConnection == null || !reconnect) { - String server = MagePreferences.getServerAddress(); - int port = MagePreferences.getServerPort(); - String userName = MagePreferences.getUserName(server); - String password = MagePreferences.getPassword(server); + String server = MagePreferences.getLastServerAddress(); + int port = MagePreferences.getLastServerPort(); + String userName = MagePreferences.getLastServerUser(); + String password = MagePreferences.getLastServerPassword(); String proxyServer = PREFS.get("proxyAddress", ""); int proxyPort = Integer.parseInt(PREFS.get("proxyPort", "0")); ProxyType proxyType = ProxyType.valueByText(PREFS.get("proxyType", "None")); @@ -1423,7 +1422,7 @@ public class MageFrame extends javax.swing.JFrame implements MageClient { hideTables(); SessionHandler.disconnect(false); if (askToReconnect) { - UserRequestMessage message = new UserRequestMessage("Connection lost", "The connection to server was lost. Reconnect?"); + UserRequestMessage message = new UserRequestMessage("Connection lost", "The connection to server was lost. Reconnect to " + MagePreferences.getLastServerAddress() + "?"); message.setButton1("No", null); message.setButton2("Yes", PlayerAction.CLIENT_RECONNECT); showUserRequestDialog(message); 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 0dc0ae52b35..10074926962 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java @@ -88,6 +88,9 @@ public class ConnectDialog extends MageDialog { MagePreferences.setUserName(serverAddress, txtUserName.getText().trim()); MagePreferences.setPassword(serverAddress, String.valueOf(txtPassword.getPassword()).trim()); MageFrame.getPreferences().put(KEY_CONNECT_AUTO_CONNECT, Boolean.toString(chkAutoConnect.isSelected())); + + // last settings for reconnect + MagePreferences.saveLastServer(); } /** diff --git a/Mage.Client/src/main/java/mage/client/preference/MagePreferences.java b/Mage.Client/src/main/java/mage/client/preference/MagePreferences.java index 7b171948678..37e84edc6de 100644 --- a/Mage.Client/src/main/java/mage/client/preference/MagePreferences.java +++ b/Mage.Client/src/main/java/mage/client/preference/MagePreferences.java @@ -2,6 +2,7 @@ package mage.client.preference; import com.google.common.collect.Sets; import mage.client.MageFrame; +import mage.client.util.Config; import java.util.Set; import java.util.prefs.BackingStoreException; @@ -16,9 +17,13 @@ public final class MagePreferences { private static final String KEY_PASSWORD = "password"; private static final String KEY_EMAIL = "email"; private static final String KEY_AUTO_CONNECT = "autoConnect"; - private static final String NODE_KEY_IGNORE_LIST = "ignoreListString"; + private static String lastServerAddress = ""; + private static int lastServerPort = 0; + private static String lastServerUser = ""; + private static String lastServerPassword = ""; + private static Preferences prefs() { // TODO: Move MageFrame.prefs to this class. return MageFrame.getPreferences(); @@ -138,4 +143,26 @@ public final class MagePreferences { return prefs().node(NODE_KEY_IGNORE_LIST).node(serverAddress); } + public static void saveLastServer() { + lastServerAddress = getServerAddressWithDefault(Config.serverName); + lastServerPort = getServerPortWithDefault(Config.port); + lastServerUser = getUserName(lastServerAddress); + lastServerPassword = getPassword(lastServerAddress); + } + + public static String getLastServerAddress() { + return lastServerAddress.isEmpty() ? getServerAddress() : lastServerAddress; + } + + public static int getLastServerPort() { + return lastServerPort == 0 ? getServerPort() : lastServerPort; + } + + public static String getLastServerUser() { + return lastServerUser.isEmpty() ? getUserName(getLastServerAddress()) : lastServerUser; + } + + public static String getLastServerPassword() { + return lastServerPassword.isEmpty() ? getPassword(getLastServerAddress()) : lastServerPassword; + } } diff --git a/Mage.Common/src/main/java/mage/interfaces/MageClient.java b/Mage.Common/src/main/java/mage/interfaces/MageClient.java index 09c079152f1..e1612c3f725 100644 --- a/Mage.Common/src/main/java/mage/interfaces/MageClient.java +++ b/Mage.Common/src/main/java/mage/interfaces/MageClient.java @@ -1,11 +1,9 @@ - package mage.interfaces; import mage.interfaces.callback.CallbackClient; import mage.utils.MageVersion; /** - * * @author BetaSteward_at_googlemail.com */ public interface MageClient extends CallbackClient { @@ -14,7 +12,7 @@ public interface MageClient extends CallbackClient { void connected(String message); - void disconnected(boolean errorCall); + void disconnected(boolean askToReconnect); void showMessage(String message); diff --git a/Mage.Tests/src/test/java/org/mage/test/load/SimpleMageClient.java b/Mage.Tests/src/test/java/org/mage/test/load/SimpleMageClient.java index 930f37f2a0d..2a5b9445d0e 100644 --- a/Mage.Tests/src/test/java/org/mage/test/load/SimpleMageClient.java +++ b/Mage.Tests/src/test/java/org/mage/test/load/SimpleMageClient.java @@ -1,6 +1,5 @@ package org.mage.test.load; -import java.util.UUID; import mage.interfaces.MageClient; import mage.interfaces.callback.ClientCallback; import mage.remote.Session; @@ -8,6 +7,8 @@ import mage.utils.MageVersion; import mage.view.GameView; import org.apache.log4j.Logger; +import java.util.UUID; + /** * For tests only * @@ -38,7 +39,7 @@ public class SimpleMageClient implements MageClient { } @Override - public void disconnected(boolean errorCall) { + public void disconnected(boolean askToReconnect) { // do nothing } @@ -62,11 +63,11 @@ public class SimpleMageClient implements MageClient { } public void setSession(Session session) { - ((LoadCallbackClient) callbackClient).setSession(session); + callbackClient.setSession(session); } public boolean isGameOver() { - return ((LoadCallbackClient) callbackClient).isGameOver(); + return callbackClient.isGameOver(); } public void setConcede(boolean needToConcede) {