From 8fd2a9e23487419cefba0bd412184a7aa4b7a162 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 4 Oct 2014 11:13:11 +0200 Subject: [PATCH] * Multiplayer - Fixed a bug that a player that left a multiplayer game was not handled correctly. Next game did not start. Running game was ended after some minutes. --- .../src/main/java/mage/server/TableController.java | 11 +++++++---- .../src/main/java/mage/server/game/GameSession.java | 3 ++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Mage.Server/src/main/java/mage/server/TableController.java b/Mage.Server/src/main/java/mage/server/TableController.java index f9501efe600..97362a72540 100644 --- a/Mage.Server/src/main/java/mage/server/TableController.java +++ b/Mage.Server/src/main/java/mage/server/TableController.java @@ -431,6 +431,7 @@ public class TableController { if (player != null && player.isInGame()) { GameManager.getInstance().quitMatch(game.getId(), userId); } + match.quitMatch(playerId); } else { if (table.getState().equals(TableState.SIDEBOARDING)) { if (!matchPlayer.isDoneSideboarding()) { @@ -519,8 +520,10 @@ public class TableController { GameManager.getInstance().createGameSession(match.getGame(), userPlayerMap, table.getId(), choosingPlayerId); String creator = null; StringBuilder opponent = new StringBuilder(); + int activePlayers = 0; for (Entry entry: userPlayerMap.entrySet()) { if (!match.getPlayer(entry.getValue()).hasQuit()) { + activePlayers++; User user = UserManager.getInstance().getUser(entry.getKey()); if (user != null) { if (!user.isConnected()) { @@ -549,11 +552,11 @@ public class TableController { matchPlayer.setQuit(true); } } - } else { - // Match player has already quit - throw new MageException("Can't start game - user already quit userId " + entry.getKey()); } } + if (activePlayers < 2) { + throw new MageException("Can't start game - Less than two players active - " +activePlayers); + } // Append AI opponents to the log file for (MatchPlayer mPlayer :match.getPlayers()) { if (!mPlayer.getPlayer().isHuman()) { @@ -855,7 +858,7 @@ public class TableController { } if (matchPlayer.getPlayer().isHuman()) { humanPlayers++; - if (!matchPlayer.hasQuit()) { + if (!matchPlayer.hasQuit() && match.getGame() != null && matchPlayer.getPlayer().isInGame()) { User user = UserManager.getInstance().getUser(userPlayerEntry.getKey()); if (user == null) { logger.debug("- Active user of match is missing: " + matchPlayer.getName()); 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 a5e2fc8c9ee..cce5261011f 100644 --- a/Mage.Server/src/main/java/mage/server/game/GameSession.java +++ b/Mage.Server/src/main/java/mage/server/game/GameSession.java @@ -289,12 +289,13 @@ public class GameSession extends GameWatcher { } catch (Exception ex) { if (ex != null) { logger.fatal("Game session game quit exception " + (ex.getMessage() == null ? "null":ex.getMessage())); + logger.debug("- gameId:" + game.getId() +" playerId: " + playerId); if (ex.getCause() != null) { logger.debug("- Cause: " + (ex.getCause().getMessage() == null ? "null":ex.getCause().getMessage())); } ex.printStackTrace(); }else { - logger.fatal("Game session game quit exception - null"); + logger.fatal("Game session game quit exception - null gameId:" + game.getId() +" playerId: " + playerId); } } }