diff --git a/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java b/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java index d6d8dd8d6d1..5483733e44e 100644 --- a/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java +++ b/Mage.Server/src/main/java/mage/server/tournament/TournamentController.java @@ -21,8 +21,8 @@ import mage.game.tournament.TournamentPlayer; import mage.players.PlayerType; import mage.server.User; import mage.server.draft.DraftController; -import mage.server.managers.TableManager; import mage.server.managers.ManagerFactory; +import mage.server.managers.TableManager; import mage.util.ThreadUtils; import mage.view.ChatMessage.MessageColor; import mage.view.ChatMessage.MessageType; @@ -129,7 +129,7 @@ public class TournamentController { checkStart(); } - public synchronized void join(UUID userId) { + public void join(UUID userId) { UUID playerId = userPlayerMap.get(userId); if (playerId == null) { if (logger.isDebugEnabled()) { @@ -143,21 +143,23 @@ public class TournamentController { logger.debug("player reopened tournament panel userId: " + userId + " tournamentId: " + tournament.getId()); return; } + // first join of player + User user = managerFactory.userManager().getUser(userId).orElse(null); + if (user == null) { + logger.error("User not found userId: " + userId + " tournamentId: " + tournament.getId()); + return; + } + TournamentSession tournamentSession = new TournamentSession(managerFactory, tournament, userId, tableId, playerId); tournamentSessions.put(playerId, tournamentSession); - Optional _user = managerFactory.userManager().getUser(userId); - if (_user.isPresent()) { - User user = _user.get(); - user.addTournament(playerId, tournament.getId()); - TournamentPlayer player = tournament.getPlayer(playerId); - player.setJoined(); - logger.debug("player " + player.getPlayer().getName() + " - client has joined tournament " + tournament.getId()); - managerFactory.chatManager().broadcast(chatId, "", player.getPlayer().getLogName() + " has joined the tournament", MessageColor.BLACK, true, null, MessageType.STATUS, null); - checkStart(); - } else { - logger.error("User not found userId: " + userId + " tournamentId: " + tournament.getId()); - } + user.addTournament(playerId, tournament.getId()); + TournamentPlayer player = tournament.getPlayer(playerId); + player.setJoined(); + logger.debug("player " + player.getPlayer().getName() + " - client has joined tournament " + tournament.getId()); + managerFactory.chatManager().broadcast(chatId, "", player.getPlayer().getLogName() + " has joined the tournament", MessageColor.BLACK, true, null, MessageType.STATUS, null); + + checkStart(); } public void rejoin(UUID playerId) { @@ -173,7 +175,7 @@ public class TournamentController { tournamentSession.update(); } - private void checkStart() { + private synchronized void checkStart() { if (!started && allJoined()) { managerFactory.threadExecutor().getTourneyExecutor().execute(this::startTournament); } @@ -191,7 +193,7 @@ public class TournamentController { return true; } - private synchronized void startTournament() { + private void startTournament() { Thread.currentThread().setName(ThreadUtils.THREAD_PREFIX_TOURNEY + " " + tableId); for (final TournamentSession tournamentSession : tournamentSessions.values()) { if (!tournamentSession.init()) {