public int getNumberOfNotFinishedTables() { int number = 0; for (Table table : tables.values()) { if (table.getState() == TableState.FINISHED) { number++; } else { Optional<TableController> tableController = TableManager.instance.getController(table.getId()); if (!tableController.isPresent()) { logger.error("table not found : " + table.getId()); } else if (tableController.get().isUserStillActive(userId)) { number++; } } } return number; }
private void sideboard(UUID playerId, Deck deck) throws MageException { for (Entry<UUID, UUID> entry : userPlayerMap.entrySet()) { if (entry.getValue().equals(playerId)) { Optional<User> user = UserManager.instance.getUser(entry.getKey()); int remaining = (int) futureTimeout.getDelay(TimeUnit.SECONDS); user.ifPresent(user1 -> user1.ccSideboard(deck, table.getId(), remaining, options.isLimited())); break; } } }
public void startDraft(Draft draft) { table.initDraft(); DraftManager.instance.createDraftSession(draft, userPlayerMap, table.getId()); for (Entry<UUID, UUID> entry : userPlayerMap.entrySet()) { Optional<User> user = UserManager.instance.getUser(entry.getKey()); if (user.isPresent()) { logger.info(new StringBuilder("User ").append(user.get().getName()).append(" draft started: ").append(draft.getId()).append(" userId: ").append(user.get().getId())); user.get().ccDraftStarted(draft.getId(), entry.getValue()); } else { logger.fatal(new StringBuilder("Start draft user not found userId: ").append(entry.getKey())); } } }
@Override public TableView createTable(UUID userId, MatchOptions options) { Table table = TableManager.instance.createTable(this.getRoomId(), userId, options); tables.put(table.getId(), table); return new TableView(table); }
@Override public TableView createTournamentTable(UUID userId, TournamentOptions options) { Table table = TableManager.instance.createTournamentTable(this.getRoomId(), userId, options); tables.put(table.getId(), table); return new TableView(table); }
public synchronized boolean changeTableStateToStarting() { if (table.getState() != TableState.READY_TO_START) { // tournament is not ready, can't start return false; } if (!table.allSeatsAreOccupied()) { logger.debug("Not alle Seats are occupied: stop start tableId:" + table.getId()); return false; } table.setState(TableState.STARTING); return true; } }
public synchronized void startTournament(UUID userId) { try { if (userId.equals(this.userId) && table.getState() == TableState.STARTING) { tournament.setStartTime(); TournamentManager.instance.createTournamentSession(tournament, userPlayerMap, table.getId()); for (Entry<UUID, UUID> entry : userPlayerMap.entrySet()) { UserManager.instance.getUser(entry.getKey()).ifPresent(user -> { logger.info(new StringBuilder("User ").append(user.getName()).append(" tournament started: ").append(tournament.getId()).append(" userId: ").append(user.getId())); user.ccTournamentStarted(tournament.getId(), entry.getValue()); }); } ServerMessagesUtil.instance.incTournamentsStarted(); } } catch (Exception ex) { logger.fatal("Error starting tournament", ex); TableManager.instance.removeTable(table.getId()); TournamentManager.instance.quit(tournament.getId(), userId); } }
public Table createTable(UUID roomId, UUID userId, MatchOptions options) { TableController tableController = new TableController(roomId, userId, options); putControllers(tableController.getTable().getId(), tableController); putTables(tableController.getTable().getId(), tableController.getTable()); return tableController.getTable(); }
public Table createTournamentTable(UUID roomId, UUID userId, TournamentOptions options) { TableController tableController = new TableController(roomId, userId, options); putControllers(tableController.getTable().getId(), tableController); putTables(tableController.getTable().getId(), tableController.getTable()); return tableController.getTable(); }
&& ((System.currentTimeMillis() - table.getStartTime().getTime()) / 1000) > 30) { // removeUserFromAllTablesAndChat only if table started longer than 30 seconds ago logger.debug(table.getId() + " [" + table.getName() + "] " + formatter.format(table.getStartTime() == null ? table.getCreateTime() : table.getCreateTime()) + " (" + table.getState().toString() + ") " + (table.isTournament() ? "- Tournament" : "")); getController(table.getId()).ifPresent(tableController -> { if ((table.isTournament() && !tableController.isTournamentStillValid()) || (!table.isTournament() && !tableController.isMatchTableStillValid())) { try { logger.warn("Removing unhealthy tableId " + table.getId()); removeTable(table.getId()); } catch (Exception e) { logger.error(e); logger.debug("Table Health check error tableId: " + table.getId()); logger.debug(Arrays.toString(ex.getStackTrace()));
public Table createTable(UUID roomId, MatchOptions options) { TableController tableController = new TableController(roomId, null, options); putControllers(tableController.getTable().getId(), tableController); putTables(tableController.getTable().getId(), tableController.getTable()); return tableController.getTable(); }
private void reconnect() { logger.trace(userName + " started reconnect"); for (Entry<UUID, Table> entry : tables.entrySet()) { ccJoinedTable(entry.getValue().getRoomId(), entry.getValue().getId(), entry.getValue().isTournament());
private boolean updateDeck(UUID userId, UUID playerId, Deck deck) { boolean validDeck = true; if (table.isTournament()) { if (tournament != null) { validDeck = TournamentManager.instance.updateDeck(tournament.getId(), playerId, deck); } else { logger.fatal("Tournament == null table: " + table.getId() + " userId: " + userId); } } else if (TableState.SIDEBOARDING == table.getState()) { validDeck = match.updateDeck(playerId, deck); } else { // deck was meanwhile submitted so the autoupdate can be ignored } return validDeck; }
public MatchView(Table table) { this.tableId = table.getId(); this.isTournament = table.isTournament(); if (table.isTournament()) { initTournamentTable(table); } else { initMatchTable(table); } }
private void submitDeck(UUID userId, UUID playerId, Deck deck) { if (table.getState() == TableState.SIDEBOARDING) { match.submitDeck(playerId, deck); UserManager.instance.getUser(userId).ifPresent(user -> user.removeSideboarding(table.getId())); } else { TournamentManager.instance.submitDeck(tournament.getId(), playerId, deck); UserManager.instance.getUser(userId).ifPresent(user -> user.removeConstructing(playerId)); } }
public TableController(UUID roomId, UUID userId, TournamentOptions options) { this.userId = userId; tournament = TournamentFactory.instance.createTournament(options.getTournamentType(), options); if (userId != null) { Optional<User> user = UserManager.instance.getUser(userId); if (!user.isPresent()) { logger.fatal(new StringBuilder("User for userId ").append(userId).append(" could not be retrieved from UserManager").toString()); controllerName = "[unknown]"; } else { controllerName = user.get().getName(); } } else { controllerName = "System"; } table = new Table(roomId, options.getTournamentType(), options.getName(), controllerName, DeckValidatorFactory.instance.createDeckValidator(options.getMatchOptions().getDeckType()), options.getPlayerTypes(), TableRecorderImpl.instance, tournament, options.getMatchOptions().getBannedUsers(), options.isPlaneChase()); chatId = ChatManager.instance.createChatSession("Tourn. table " + table.getId()); }
tableManager.addPlayer(user1Uuid, table.getId(), player1); tableManager.addPlayer(user2Uuid, table.getId(), player2); table.setState(TableState.STARTING); tableManager.startTournamentSubMatch(null, table.getId()); tableManager.getMatch(table.getId()).ifPresent(match -> { match.setTableId(tableId); pair.setMatch(match); pair.setTableId(table.getId()); player1.setState(TournamentPlayerState.DUELING); player2.setState(TournamentPlayerState.DUELING);
private void startMultiplayerMatch(MultiplayerRound round, MatchOptions matchOptions) { try { TableManager tableManager = TableManager.instance; Table table = tableManager.createTable(GamesRoomManager.instance.getMainRoomId(), matchOptions); table.setTournamentSubTable(true); table.setTournament(tournament); table.setState(TableState.WAITING); if (round.getAllPlayers().stream().allMatch(tournamentPlayer -> getPlayerUserId(tournamentPlayer.getPlayer().getId()).isPresent())) { for (TournamentPlayer player : round.getAllPlayers()) { tableManager.addPlayer(getPlayerUserId(player.getPlayer().getId()).get(), table.getId(), player); } table.setState(TableState.STARTING); tableManager.startTournamentSubMatch(null, table.getId()); tableManager.getMatch(table.getId()).ifPresent(match -> { match.setTableId(tableId); round.setMatch(match); round.setTableId(table.getId()); for (TournamentPlayer player : round.getAllPlayers()) { player.setState(TournamentPlayerState.DUELING); } }); } } catch (GameException ex) { logger.fatal("TournamentController startMatch error", ex); } }
public synchronized boolean replaceDraftPlayer(Player oldPlayer, String name, PlayerType playerType, int skill) { Optional<Player> newPlayerOpt = createPlayer(name, playerType, skill); if (!newPlayerOpt.isPresent() || table.getState() != TableState.DRAFTING) { return false; } Player newPlayer = newPlayerOpt.get(); TournamentPlayer oldTournamentPlayer = tournament.getPlayer(oldPlayer.getId()); tournament.removePlayer(oldPlayer.getId()); tournament.addPlayer(newPlayer, playerType); TournamentPlayer newTournamentPlayer = tournament.getPlayer(newPlayer.getId()); newTournamentPlayer.setState(oldTournamentPlayer.getState()); newTournamentPlayer.setReplacedTournamentPlayer(oldTournamentPlayer); DraftManager.instance.getController(table.getId()).ifPresent(controller -> controller.replacePlayer(oldPlayer, newPlayer)); return true; }
public TableController(UUID roomId, UUID userId, MatchOptions options) { this.userId = userId; this.options = options; match = GameFactory.instance.createMatch(options.getGameType(), options); if (userId != null) { Optional<User> user = UserManager.instance.getUser(userId); // TODO: Handle if user == null controllerName = user.map(User::getName).orElse("undefined"); } else { controllerName = "System"; } table = new Table(roomId, options.getGameType(), options.getName(), controllerName, DeckValidatorFactory.instance.createDeckValidator(options.getDeckType()), options.getPlayerTypes(), TableRecorderImpl.instance, match, options.getBannedUsers(), options.isPlaneChase()); chatId = ChatManager.instance.createChatSession("Match Table " + table.getId()); init(); }