diff --git a/Mage.Common/src/mage/interfaces/MageServer.java b/Mage.Common/src/mage/interfaces/MageServer.java index 75baad0e6a8..85bae2817e1 100644 --- a/Mage.Common/src/mage/interfaces/MageServer.java +++ b/Mage.Common/src/mage/interfaces/MageServer.java @@ -56,7 +56,11 @@ import mage.view.UserView; public interface MageServer { // connection methods - boolean registerClient(String userName, String password, String sessionId, MageVersion version) throws MageException; + // DEPRECATED - Use registerClientWithPassword instead. This is kept for older clients. + // This can be deleted once users transitioned to newer clients (1.4.6v1 and later). + boolean registerClient(String userName, String sessionId, MageVersion version) throws MageException; + + boolean registerClientWithPassword(String userName, String password, String sessionId, MageVersion version) throws MageException; boolean registerAdmin(String password, String sessionId, MageVersion version) throws MageException; // Not used diff --git a/Mage.Common/src/mage/remote/SessionImpl.java b/Mage.Common/src/mage/remote/SessionImpl.java index a75ab5ab49b..eab3306e5bc 100644 --- a/Mage.Common/src/mage/remote/SessionImpl.java +++ b/Mage.Common/src/mage/remote/SessionImpl.java @@ -280,7 +280,7 @@ public class SessionImpl implements Session { boolean registerResult; if (connection.getAdminPassword() == null) { // for backward compatibility. don't remove twice call - first one does nothing but for version checking - registerResult = server.registerClient(connection.getUsername(), connection.getPassword(), sessionId, client.getVersion()); + registerResult = server.registerClientWithPassword(connection.getUsername(), connection.getPassword(), sessionId, client.getVersion()); if (registerResult) { server.setUserData(connection.getUsername(), sessionId, connection.getUserData()); } @@ -304,13 +304,19 @@ public class SessionImpl implements Session { client.showMessage("Unable to connect to server. " + ex.getMessage()); } catch (UndeclaredThrowableException ex) { String addMessage = ""; - if (ex.getCause() instanceof InvocationFailureException) { - InvocationFailureException exep = (InvocationFailureException) ex.getCause(); + Throwable cause = ex.getCause(); + if (cause instanceof InvocationFailureException) { + InvocationFailureException exep = (InvocationFailureException) cause; if (exep.getCause() instanceof IOException) { if (exep.getCause().getMessage().startsWith("Field hash null is not available on current")) { addMessage = "Probabaly the server version is not compatible to the client. "; } } + } else if (cause instanceof NoSuchMethodException) { + // NoSuchMethodException is thrown on an invocation of an unknow JBoss remoting + // method, so it's likely to be because of a version incompatibility. + addMessage = "The following method is not available in the server, probably the " + + "server version is not compatible to the client: " + cause.getMessage(); } if (addMessage.isEmpty()) { logger.fatal("", ex); diff --git a/Mage.Server/src/main/java/mage/server/MageServerImpl.java b/Mage.Server/src/main/java/mage/server/MageServerImpl.java index 2405d45f6b8..c4f3b420f4a 100644 --- a/Mage.Server/src/main/java/mage/server/MageServerImpl.java +++ b/Mage.Server/src/main/java/mage/server/MageServerImpl.java @@ -106,7 +106,15 @@ public class MageServerImpl implements MageServer { } @Override - public boolean registerClient(String userName, String password, String sessionId, MageVersion version) throws MageException { + public boolean registerClient(String userName, String sessionId, MageVersion version) throws MageException { + // This method is deprecated, so just inform the server version. + logger.info("MageVersionException: userName=" + userName + ", version=" + version); + LogServiceImpl.instance.log(LogKeys.KEY_WRONG_VERSION, userName, version.toString(), Main.getVersion().toString(), sessionId); + throw new MageVersionException(version, Main.getVersion()); + } + + @Override + public boolean registerClientWithPassword(String userName, String password, String sessionId, MageVersion version) throws MageException { try { if (version.compareTo(Main.getVersion()) != 0) { logger.info("MageVersionException: userName=" + userName + ", version=" + version);