From 038b15f399a9a6abf798817561186772a833a4b6 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 19 Oct 2013 18:40:46 +0200 Subject: [PATCH] * Changed some server logging. --- .../src/main/java/mage/server/Main.java | 11 ++-- .../src/main/java/mage/server/Session.java | 13 ++-- .../main/java/mage/server/SessionManager.java | 66 ++++++++++--------- .../java/mage/server/TableController.java | 18 ++++- .../src/main/java/mage/server/User.java | 7 +- .../main/java/mage/server/UserManager.java | 19 ++++-- .../server/challenge/ChallengeManager.java | 1 - .../java/mage/server/game/GameController.java | 2 +- .../java/mage/server/game/GameSession.java | 4 +- .../java/mage/server/game/GameWatcher.java | 10 ++- 10 files changed, 89 insertions(+), 62 deletions(-) diff --git a/Mage.Server/src/main/java/mage/server/Main.java b/Mage.Server/src/main/java/mage/server/Main.java index 35637b13ee5..23a3f0c40f3 100644 --- a/Mage.Server/src/main/java/mage/server/Main.java +++ b/Mage.Server/src/main/java/mage/server/Main.java @@ -167,20 +167,21 @@ public class Main { public void handleConnectionException(Throwable throwable, Client client) { Session session = SessionManager.getInstance().getSession(client.getSessionId()); if (session != null) { - String sessionName; + StringBuilder sessionInfo = new StringBuilder(); User user = UserManager.getInstance().getUser(session.getUserId()); if (user != null) { - sessionName = user.getName() + " at " + session.getHost(); + sessionInfo.append(user.getName()); } else { - sessionName = session.getHost(); + sessionInfo.append("[user missing] "); } + sessionInfo.append(" at ").append(session.getHost()).append(" sessionId: ").append(session.getId()); if (throwable instanceof ClientDisconnectedException) { SessionManager.getInstance().disconnect(client.getSessionId(), true); - logger.info("Client disconnected - " + sessionName); + logger.debug("Client disconnected - " + sessionInfo); } else { SessionManager.getInstance().disconnect(client.getSessionId(), false); - logger.info("Connection to client lost - " + sessionName); + logger.info("Connection to client lost - " + sessionInfo); } } } diff --git a/Mage.Server/src/main/java/mage/server/Session.java b/Mage.Server/src/main/java/mage/server/Session.java index 373d376b243..bef4a14b17d 100644 --- a/Mage.Server/src/main/java/mage/server/Session.java +++ b/Mage.Server/src/main/java/mage/server/Session.java @@ -90,12 +90,11 @@ public class Session { if (user.getHost().equals(host)) { if (user.getSessionId().isEmpty()) { logger.info("Reconnecting session for " + userName); - } - else { + } else { //throw new MageException("This machine is already connected"); //disconnect previous one logger.info("Disconnecting another user instance: " + userName); - UserManager.getInstance().disconnect(user.getId()); + UserManager.getInstance().disconnect(user.getId(), User.DisconnectReason.ConnectingOtherInstance); } } else { @@ -159,13 +158,13 @@ public class Session { return sessionId; } - public void disconnect() { + public void userLostConnection() { logger.info("session disconnected for user " + userId); - UserManager.getInstance().disconnect(userId); + UserManager.getInstance().disconnect(userId, User.DisconnectReason.LostConnection); } public void kill() { - logger.info("session killed for user " + userId); + logger.debug("session removed for user " + userId); UserManager.getInstance().removeUser(userId, User.DisconnectReason.Disconnected); } @@ -175,7 +174,7 @@ public class Session { callbackHandler.handleCallbackOneway(new Callback(call)); } catch (HandleCallbackException ex) { logger.fatal(new StringBuilder("Session of userId ").append(userId).append(" fireCallback error: ").append(ex.getMessage()).toString(), ex); - disconnect(); + userLostConnection(); } } diff --git a/Mage.Server/src/main/java/mage/server/SessionManager.java b/Mage.Server/src/main/java/mage/server/SessionManager.java index 537411da702..03f54231790 100644 --- a/Mage.Server/src/main/java/mage/server/SessionManager.java +++ b/Mage.Server/src/main/java/mage/server/SessionManager.java @@ -1,31 +1,30 @@ /* -* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. -* -* Redistribution and use in source and binary forms, with or without modification, are -* permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, this list of -* conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, this list -* of conditions and the following disclaimer in the documentation and/or other materials -* provided with the distribution. -* -* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED -* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR -* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* The views and conclusions contained in the software and documentation are those of the -* authors and should not be interpreted as representing official policies, either expressed -* or implied, of BetaSteward_at_googlemail.com. -*/ - + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ package mage.server; import java.util.HashMap; @@ -38,7 +37,6 @@ import mage.view.UserDataView; import org.apache.log4j.Logger; import org.jboss.remoting.callback.InvokerCallbackHandler; - /** * * @author BetaSteward_at_googlemail.com @@ -51,7 +49,6 @@ public class SessionManager { public static SessionManager getInstance() { return INSTANCE; } - private ConcurrentHashMap sessions = new ConcurrentHashMap(); public Session getSession(String sessionId) { @@ -71,7 +68,10 @@ public class SessionManager { if (session != null) { session.registerUser(userName); LogServiceImpl.instance.log(LogKeys.KEY_USER_CONNECTED, userName, session.getHost(), sessionId); - logger.info("User " + userName + " connected from " + session.getHost() + " sessionId: " + sessionId); + logger.info(new StringBuilder("User: ").append(userName) + .append(" userId: ").append(session.getUserId()) + .append(" connected from: ").append(session.getHost()) + .append(" sessionId: ").append(sessionId)); return true; } return false; @@ -102,10 +102,12 @@ public class SessionManager { sessions.remove(sessionId); if (session != null) { if (voluntary) { + // disconnected session.kill(); LogServiceImpl.instance.log(LogKeys.KEY_SESSION_KILLED, sessionId); } else { - session.disconnect(); + // lost connection + session.userLostConnection(); LogServiceImpl.instance.log(LogKeys.KEY_SESSION_DISCONNECTED, sessionId); } } else { @@ -116,7 +118,7 @@ public class SessionManager { public Map getSessions() { Map map = new HashMap(); for (Map.Entry entry : sessions.entrySet()) { - map.put(entry.getKey(), entry.getValue()); + map.put(entry.getKey(), entry.getValue()); } return map; } diff --git a/Mage.Server/src/main/java/mage/server/TableController.java b/Mage.Server/src/main/java/mage/server/TableController.java index 8898d4be360..9a8366bf430 100644 --- a/Mage.Server/src/main/java/mage/server/TableController.java +++ b/Mage.Server/src/main/java/mage/server/TableController.java @@ -314,7 +314,11 @@ public class TableController { match.updateDeck(playerId, deck); } else { - TournamentManager.getInstance().updateDeck(tournament.getId(), playerId, deck); + if (tournament != null) { + TournamentManager.getInstance().updateDeck(tournament.getId(), playerId, deck); + } else { + logger.fatal("Tournament == null table: " + table.getId()); + } } } @@ -427,6 +431,8 @@ public class TableController { public synchronized void startMatch() { if (table.getState() == TableState.STARTING) { try { + User user = UserManager.getInstance().getUser(userId); + logger.info(new StringBuilder("User (table controller) ").append(user.getName()).append(" starts match: ").append(match.getId())); match.startMatch(); startGame(null); } catch (GameException ex) { @@ -447,6 +453,7 @@ public class TableController { if (!match.getPlayer(entry.getValue()).hasQuit()) { User user = UserManager.getInstance().getUser(entry.getKey()); if (user != null) { + logger.info(new StringBuilder("User ").append(user.getName()).append(" game started - matchId ").append(match.getId()).append(" userId: ").append(user.getId())); user.gameStarted(match.getGame().getId(), entry.getValue()); if (creator == null) { creator = user.getName(); @@ -493,6 +500,7 @@ public class TableController { for (Entry entry: userPlayerMap.entrySet()) { User user = UserManager.getInstance().getUser(entry.getKey()); if (user != null) { + logger.info(new StringBuilder("User ").append(user.getName()).append(" tournament started: ").append(tournament.getId()).append(" userId: ").append(user.getId())); user.tournamentStarted(tournament.getId(), entry.getValue()); } } @@ -510,7 +518,13 @@ public class TableController { table.initDraft(); DraftManager.getInstance().createDraftSession(draft, userPlayerMap, table.getId()); for (Entry entry: userPlayerMap.entrySet()) { - UserManager.getInstance().getUser(entry.getKey()).draftStarted(draft.getId(), entry.getValue()); + User user = UserManager.getInstance().getUser(entry.getKey()); + if (user != null) { + logger.info(new StringBuilder("User ").append(user.getName()).append(" draft started: ").append(match.getId()).append(" userId: ").append(user.getId())); + user.draftStarted(draft.getId(), entry.getValue()); + } else { + logger.fatal(new StringBuilder("Start draft user not found userId: ").append(entry.getKey())); + } } } diff --git a/Mage.Server/src/main/java/mage/server/User.java b/Mage.Server/src/main/java/mage/server/User.java index 789b5de49dd..1ac44db803c 100644 --- a/Mage.Server/src/main/java/mage/server/User.java +++ b/Mage.Server/src/main/java/mage/server/User.java @@ -35,7 +35,6 @@ import java.util.Map; import java.util.Map.Entry; import java.util.UUID; import mage.cards.decks.Deck; -import mage.constants.TableState; import mage.game.Table; import mage.interfaces.callback.ClientCallback; import mage.players.net.UserData; @@ -60,7 +59,7 @@ public class User { } public enum DisconnectReason { - LostConnection, Disconnected, CleaningUp; + LostConnection, Disconnected, CleaningUp, ConnectingOtherInstance; } private UUID userId = UUID.randomUUID(); @@ -105,10 +104,10 @@ public class User { this.sessionId = sessionId; if (sessionId.isEmpty()) { userState = UserState.Disconnected; - logger.info(new StringBuilder("User ").append(userName).append(" disconnected - userId = ").append(userId.toString()).toString()); + logger.debug(new StringBuilder("User ").append(userName).append(" disconnected - userId = ").append(userId.toString()).toString()); } else if (userState == UserState.Created) { userState = UserState.Connected; - logger.info(new StringBuilder("User ").append(userName).append(" created - userId = ").append(userId.toString()).toString()); + logger.debug(new StringBuilder("User ").append(userName).append(" created - userId = ").append(userId.toString()).toString()); } else { userState = UserState.Reconnected; reconnect(); diff --git a/Mage.Server/src/main/java/mage/server/UserManager.java b/Mage.Server/src/main/java/mage/server/UserManager.java index e4f3684166c..7ff9d0b2e51 100644 --- a/Mage.Server/src/main/java/mage/server/UserManager.java +++ b/Mage.Server/src/main/java/mage/server/UserManager.java @@ -100,12 +100,12 @@ public class UserManager { return false; } - public void disconnect(UUID userId) { + public void disconnect(UUID userId, User.DisconnectReason reason) { if (userId != null) { - ChatManager.getInstance().removeUser(userId, User.DisconnectReason.Disconnected); + ChatManager.getInstance().removeUser(userId, reason); if (users.containsKey(userId)) { User user = users.get(userId); - logger.info(new StringBuilder("User ").append(user.getName()).append(" disconnected id:").append(userId).toString()); + logger.info(new StringBuilder("User ").append(user.getName()).append(" has lost connection userId:").append(userId)); users.get(userId).setSessionId(""); ChatManager.getInstance().broadcast(userId, "has lost connection", MessageColor.BLACK); } @@ -120,12 +120,18 @@ public class UserManager { } public void removeUser(UUID userId, User.DisconnectReason reason) { - if (users.containsKey(userId)) { - logger.info("Remove user " + users.get(userId).getName() + ": " + userId + " Reason: " + reason.toString()); + User user = users.get(userId); + if (user != null) { + logger.info(new StringBuilder("Remove user: ").append(user.getName()) + .append(" userId: ").append(userId) + .append(" sessionId: ").append(user.getSessionId()) + .append(" Reason: ").append(reason.toString())); ChatManager.getInstance().removeUser(userId, reason); ChatManager.getInstance().broadcast(userId, new StringBuilder("has disconnected (").append(reason.toString()).append(")").toString(), MessageColor.BLACK); users.get(userId).kill(reason); users.remove(userId); + } else { + logger.warn(new StringBuilder("Trying to remove userId: ").append(userId).append(" but user does not exist.")); } } @@ -142,7 +148,8 @@ public class UserManager { expired.add(Calendar.MINUTE, -3) ; for (User user: users.values()) { if (user.isExpired(expired.getTime())) { - logger.info(user.getName() + " session expired " + user.getId()); + logger.info(new StringBuilder(user.getName()).append(" session expired userId: ").append(user.getId()) + .append(" sessionId: ").append(user.getSessionId())); user.kill(User.DisconnectReason.LostConnection); users.remove(user.getId()); } diff --git a/Mage.Server/src/main/java/mage/server/challenge/ChallengeManager.java b/Mage.Server/src/main/java/mage/server/challenge/ChallengeManager.java index d04e7f9d987..f8c17b83a80 100644 --- a/Mage.Server/src/main/java/mage/server/challenge/ChallengeManager.java +++ b/Mage.Server/src/main/java/mage/server/challenge/ChallengeManager.java @@ -3,7 +3,6 @@ package mage.server.challenge; import java.util.HashMap; import java.util.Map; import java.util.UUID; - import mage.constants.Zone; import mage.game.match.Match; diff --git a/Mage.Server/src/main/java/mage/server/game/GameController.java b/Mage.Server/src/main/java/mage/server/game/GameController.java index 71913b73387..15d29a37a17 100644 --- a/Mage.Server/src/main/java/mage/server/game/GameController.java +++ b/Mage.Server/src/main/java/mage/server/game/GameController.java @@ -314,7 +314,7 @@ public class GameController implements GameCallback { } User user = UserManager.getInstance().getUser(userId); if (user != null) { - GameWatcher gameWatcher = new GameWatcher(userId, game); + GameWatcher gameWatcher = new GameWatcher(userId, game, false); watchers.put(userId, gameWatcher); gameWatcher.init(); ChatManager.getInstance().broadcast(chatId, user.getName(), " has started watching", MessageColor.BLUE); diff --git a/Mage.Server/src/main/java/mage/server/game/GameSession.java b/Mage.Server/src/main/java/mage/server/game/GameSession.java index d070c5fa25e..b94bc896d2d 100644 --- a/Mage.Server/src/main/java/mage/server/game/GameSession.java +++ b/Mage.Server/src/main/java/mage/server/game/GameSession.java @@ -66,7 +66,7 @@ public class GameSession extends GameWatcher { private UserData userData; public GameSession(Game game, UUID userId, UUID playerId, boolean useTimeout) { - super(userId, game); + super(userId, game, true); this.playerId = playerId; this.useTimeout = useTimeout; } @@ -229,7 +229,7 @@ public class GameSession extends GameWatcher { public GameView getGameView() { Player player = game.getPlayer(playerId); player.setUserData(this.userData); - GameView gameView = new GameView(game.getState(), game); + GameView gameView = new GameView(game.getState(), game, this.isPlayer); gameView.setHand(new SimpleCardsView(player.getHand().getCards(game))); if (player.getPlayersUnderYourControl().size() > 0) { diff --git a/Mage.Server/src/main/java/mage/server/game/GameWatcher.java b/Mage.Server/src/main/java/mage/server/game/GameWatcher.java index 7193e82faa0..cb60c5a8936 100644 --- a/Mage.Server/src/main/java/mage/server/game/GameWatcher.java +++ b/Mage.Server/src/main/java/mage/server/game/GameWatcher.java @@ -52,10 +52,12 @@ public class GameWatcher { protected UUID userId; protected Game game; protected boolean killed = false; + protected boolean isPlayer; - public GameWatcher(UUID userId, Game game) { + public GameWatcher(UUID userId, Game game, boolean isPlayer) { this.userId = userId; this.game = game; + this.isPlayer = isPlayer; } public boolean init() { @@ -124,11 +126,15 @@ public class GameWatcher { } public GameView getGameView() { - return new GameView(game.getState(), game); + return new GameView(game.getState(), game, this.isPlayer); } public GameEndView getGameEndView(UUID playerId, Match match) { return new GameEndView(game.getState(), game, playerId, match); } + public boolean isPlayer() { + return isPlayer; + } + }