From 2c5463d5eb52332b7aa23d87b1a92dcf9e8250fc Mon Sep 17 00:00:00 2001 From: BetaSteward Date: Sun, 11 Sep 2011 22:19:26 -0400 Subject: [PATCH] fixed client not disconnected if error occurred during callback --- Mage.Server/src/main/java/mage/server/Session.java | 2 ++ .../src/main/java/mage/server/SessionManager.java | 7 +++++-- Mage.Server/src/main/java/mage/server/User.java | 14 ++++++++++---- .../src/main/java/mage/server/UserManager.java | 5 ++++- 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/Mage.Server/src/main/java/mage/server/Session.java b/Mage.Server/src/main/java/mage/server/Session.java index 8a782381775..c99199b4726 100644 --- a/Mage.Server/src/main/java/mage/server/Session.java +++ b/Mage.Server/src/main/java/mage/server/Session.java @@ -131,10 +131,12 @@ public class Session { } public void disconnect() { + logger.info("session disconnected for user " + userId); UserManager.getInstance().disconnect(userId); } public void kill() { + logger.info("session killed for user " + userId); UserManager.getInstance().removeUser(userId); } diff --git a/Mage.Server/src/main/java/mage/server/SessionManager.java b/Mage.Server/src/main/java/mage/server/SessionManager.java index d062cdb06c1..5b63a16ab01 100644 --- a/Mage.Server/src/main/java/mage/server/SessionManager.java +++ b/Mage.Server/src/main/java/mage/server/SessionManager.java @@ -67,7 +67,7 @@ public class SessionManager { Session session = sessions.get(sessionId); if (session != null) { session.registerUser(userName); - logger.info("User " + userName + " connected from " + session.getHost()); + logger.info("User " + userName + " connected from " + session.getHost() + " sessionId: " + sessionId); return true; } return false; @@ -94,13 +94,16 @@ public class SessionManager { public synchronized void disconnect(String sessionId, boolean voluntary) { Session session = sessions.get(sessionId); + sessions.remove(sessionId); if (session != null) { if (voluntary) session.kill(); else session.disconnect(); - sessions.remove(sessionId); } + else { + logger.info("could not find session with id " + sessionId); + } } public Map getSessions() { diff --git a/Mage.Server/src/main/java/mage/server/User.java b/Mage.Server/src/main/java/mage/server/User.java index c5c593e9cd9..875ddbff9d8 100644 --- a/Mage.Server/src/main/java/mage/server/User.java +++ b/Mage.Server/src/main/java/mage/server/User.java @@ -41,6 +41,7 @@ import mage.server.game.GameManager; import mage.server.game.GameSession; import mage.server.tournament.TournamentSession; import mage.view.TableClientMessage; +import org.apache.log4j.Logger; /** * @@ -48,7 +49,9 @@ import mage.view.TableClientMessage; */ public class User { - public enum UserState { + private final static Logger logger = Logger.getLogger(User.class); + + public enum UserState { Created, Connected, Disconnected, Reconnected; } @@ -92,13 +95,16 @@ public class User { public void setSessionId(String sessionId) { this.sessionId = sessionId; - if (sessionId.isEmpty()) + if (sessionId.isEmpty()) { userState = UserState.Disconnected; - else if (userState == UserState.Created) + logger.info("User " + userName + " disconnected"); + } else if (userState == UserState.Created) { userState = UserState.Connected; - else { + logger.info("User " + userName + " created"); + } else { userState = UserState.Reconnected; reconnect(); + logger.info("User " + userName + " reconnected"); } } diff --git a/Mage.Server/src/main/java/mage/server/UserManager.java b/Mage.Server/src/main/java/mage/server/UserManager.java index b9f9b2560ce..f535a2f6a36 100644 --- a/Mage.Server/src/main/java/mage/server/UserManager.java +++ b/Mage.Server/src/main/java/mage/server/UserManager.java @@ -35,8 +35,8 @@ import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; -import mage.players.net.UserData; import mage.view.ChatMessage.MessageColor; +import org.apache.log4j.Logger; /** * @@ -50,6 +50,7 @@ public class UserManager { protected static ScheduledExecutorService expireExecutor = Executors.newSingleThreadScheduledExecutor(); private final static UserManager INSTANCE = new UserManager(); + private final static Logger logger = Logger.getLogger(UserManager.class); public static UserManager getInstance() { return INSTANCE; @@ -100,6 +101,7 @@ public class UserManager { public void disconnect(UUID userId) { if (users.containsKey(userId)) { + logger.info("user disconnected " + userId); users.get(userId).setSessionId(""); ChatManager.getInstance().broadcast(userId, "has lost connection", MessageColor.BLACK); } @@ -114,6 +116,7 @@ public class UserManager { public void removeUser(UUID userId) { if (users.containsKey(userId)) { + logger.info("user removed" + userId); users.get(userId).setSessionId(""); ChatManager.getInstance().broadcast(userId, "has disconnected", MessageColor.BLACK); users.get(userId).kill();