public TournamentView(Tournament tournament) { tournamentName = tournament.getOptions().getName(); StringBuilder typeText = new StringBuilder(tournament.getOptions().getTournamentType()); if (!tournament.getTournamentType().isLimited()) { typeText.append(" / ").append(tournament.getOptions().getMatchOptions().getDeckType()); } if (tournament.getNumberRounds() > 0) { typeText.append(' ').append(tournament.getNumberRounds()).append(" rounds"); } tournamentType = typeText.toString(); startTime = tournament.getStartTime(); endTime = tournament.getEndTime(); stepStartTime = tournament.getStepStartTime(); constructionTime = tournament.getOptions().getLimitedOptions().getConstructionTime(); watchingAllowed = tournament.getOptions().isWatchingAllowed(); serverTime = new Date(); tournamentState = tournament.getTournamentState(); if (tournament.getTournamentState().equals("Drafting") && tournament.getDraft() != null) { runningInfo = "booster/card: " + tournament.getDraft().getBoosterNum() + '/' + (tournament.getDraft().getCardNum() -1); } else { runningInfo = ""; } for (TournamentPlayer player: tournament.getPlayers()) { players.add(new TournamentPlayerView(player)); } Collections.sort(players); for (Round round: tournament.getRounds()) { rounds.add(new RoundView(round)); } }
tournament.setTournamentType(tournamentTypes.get(tournamentType)); if (tournament.getTournamentType().isLimited()) { Map<String,Integer> setInfo = new LinkedHashMap<>(); for (String setCode: options.getLimitedOptions().getSetCodes()) { tournament.getSets().add(Sets.findSet(setCode)); int count = setInfo.getOrDefault(setCode, 0); setInfo.put(setCode, count + 1); tournament.getOptions().getLimitedOptions().setNumberBoosters(tournament.getTournamentType().getNumBoosters()); if (tournament.getTournamentType().isCubeBooster()) { DraftCube draftCube; if (tournament.getOptions().getLimitedOptions().getCubeFromDeck() != null) { draftCube = CubeFactory.instance.createDeckDraftCube(tournament.getOptions().getLimitedOptions().getDraftCubeName(), tournament.getOptions().getLimitedOptions().getCubeFromDeck()); } else { draftCube = CubeFactory.instance.createDraftCube(tournament.getOptions().getLimitedOptions().getDraftCubeName()); tournament.getOptions().getLimitedOptions().setDraftCube(draftCube); tournament.setBoosterInfo(tournament.getOptions().getLimitedOptions().getDraftCubeName()); } else if (tournament.getTournamentType().isRandom()) { StringBuilder rv = new StringBuilder( "Random Draft using sets: "); for (Map.Entry<String, Integer> entry: setInfo.entrySet()){ tournament.setBoosterInfo(rv.toString()); } else { StringBuilder sb = new StringBuilder(); tournament.setBoosterInfo(sb.toString());
public void submitDeck(Deck deck) { cancelTimeout(); tournament.submitDeck(playerId, deck); }
private synchronized void startTournament() { for (final TournamentSession tournamentSession : tournamentSessions.values()) { if (!tournamentSession.init()) { logger.fatal("Unable to initialize client userId: " + tournamentSession.userId + " tournamentId " + tournament.getId()); //TODO: generate client error message return; } } started = true; logger.debug("Tournament starts (all players joined): " + tournament.getId() + " - " + tournament.getTournamentType().toString()); tournament.nextStep(); }
private void endTournament() { for (TournamentPlayer player : tournament.getPlayers()) { player.setStateAtTournamentEnd(); } for (final TournamentSession tournamentSession : tournamentSessions.values()) { tournamentSession.tournamentOver(); } this.tournamentSessions.clear(); TableManager.instance.endTournament(tableId, tournament); tournament.cleanUpOnTournamentEnd(); }
private void initTournamentTable(Table table) { this.matchId = table.getTournament().getId(); this.matchName = table.getName(); this.gameType = table.getGameType(); if (table.getTournament().getOptions().getNumberRounds() > 0) { this.gameType = new StringBuilder(this.gameType).append(' ').append(table.getTournament().getOptions().getNumberRounds()).append(" Rounds").toString(); if (!table.getTournament().getBoosterInfo().isEmpty()) { sbDeckType.append(' ').append(table.getTournament().getBoosterInfo()); for (TournamentPlayer tPlayer : table.getTournament().getPlayers()) { sb1.append(tPlayer.getPlayer().getName()).append(" (").append(tPlayer.getPoints()).append(" P.) "); if (!table.getTournament().getRounds().isEmpty()) { for (TournamentPlayer tPlayer : table.getTournament().getPlayers()) { sb2.append(tPlayer.getPlayer().getName()).append(": ").append(tPlayer.getResults()).append(' '); this.startTime = table.getTournament().getStartTime(); this.endTime = table.getTournament().getEndTime(); this.replayAvailable = false; this.rated = table.getTournament().getOptions().getMatchOptions().isRated();
} else { if (table.isTournament()) { this.createTime = table.getTournament().getStartTime(); } else { this.createTime = table.getMatch().getStartTime(); if (table.getTournament().getOptions().getNumberRounds() > 0) { this.gameType = new StringBuilder(this.gameType).append(' ').append(table.getTournament().getOptions().getNumberRounds()).append(" Rounds").toString(); for (TournamentPlayer tp : table.getTournament().getPlayers()) { if (!tp.getPlayer().getName().equals(table.getControllerName())) { sb1.append(", ").append(tp.getPlayer().getName()); this.seatsInfo = "" + table.getTournament().getPlayers().size() + "/" + table.getNumberOfSeats(); StringBuilder infoText = new StringBuilder(); StringBuilder stateText = new StringBuilder(table.getState().toString()); infoText.append("Wins:").append(table.getTournament().getOptions().getMatchOptions().getWinsNeeded()); infoText.append(" Seats: ").append(this.seatsInfo); switch (table.getState()) { case WAITING: stateText.append(" (").append(table.getTournament().getPlayers().size()).append('/').append(table.getNumberOfSeats()).append(')'); case READY_TO_START: case STARTING: infoText.append(" Time: ").append(table.getTournament().getOptions().getMatchOptions().getMatchTimeLimit().toString()); if (table.getTournament().getOptions().getMatchOptions().getFreeMulligans() > 0) { infoText.append(" Fr.Mul: ").append(table.getTournament().getOptions().getMatchOptions().getFreeMulligans()); if (table.getTournament().getTournamentType().isLimited()) { infoText.append(" Constr.: ").append(table.getTournament().getOptions().getLimitedOptions().getConstructionTime() / 60).append(" Min.");
public void quit(UUID userId) { UUID playerId = userPlayerMap.get(userId); if (playerId == null) { logger.debug("Player not found userId:" + userId + " tournId: " + tournament.getId()); return; TournamentPlayer tournamentPlayer = tournament.getPlayer(playerId); if (tournamentPlayer == null) { logger.debug("TournamentPlayer not found userId: " + userId + " tournId: " + tournament.getId()); return; tournament.leave(playerId); return; logger.debug("TournamentSession not found userId: " + userId + " tournId: " + tournament.getId()); return; String info; TourneyQuitStatus status; if (tournament.isDoneConstructing()) { info = new StringBuilder("during round ").append(tournament.getRounds().size()).toString(); TableManager.instance.userQuitTournamentSubTables(tournament.getId(), userId); status = TourneyQuitStatus.DURING_ROUND; } else if (tournamentPlayer.getState() == TournamentPlayerState.DRAFTING) { tournament.quit(playerId); tournamentSession.quit(); ChatManager.instance.broadcast(chatId, "", tournamentPlayer.getPlayer().getLogName() + " has quit the tournament", MessageColor.BLACK, true, MessageType.STATUS, SoundToPlay.PlayerQuitTournament);
public UUID getTournamentId() { return tournament.getId(); }
if (!table.getTournament().getOptions().getPassword().isEmpty() && playerType == PlayerType.HUMAN) { if (!table.getTournament().getOptions().getPassword().equals(password)) { user.showUserMessage("Join Table", "Wrong password."); return false; if (!table.getTournament().getTournamentType().isLimited()) { if (deckList != null) { deck = Deck.load(deckList, false, false); int quitRatio = table.getTournament().getOptions().getQuitRatio(); if (quitRatio < user.getTourneyQuitRatio()) { String message = new StringBuilder("Your quit ratio ").append(user.getTourneyQuitRatio()) int minimumRating = table.getTournament().getOptions().getMinimumRating(); int userRating; if (table.getTournament().getOptions().getMatchOptions().isLimited()) { userRating = user.getUserData().getLimitedRating(); } else { return false; tournament.addPlayer(player, seat.getPlayerType()); TournamentPlayer tournamentPlayer = tournament.getPlayer(player.getId()); if (deck != null && tournamentPlayer != null) { tournamentPlayer.submitDeck(deck);
private void init() { tournament.addTableEventListener( (Listener<TableEvent>) event -> { switch (event.getEventType()) { case INFO: ChatManager.instance.broadcast(chatId, "", event.getMessage(), MessageColor.BLACK, true, MessageType.STATUS, null); logger.debug(tournament.getId() + " " + event.getMessage()); break; case START_DRAFT: tournament.addPlayerQueryEventListener( (Listener<PlayerQueryEvent>) event -> { try { for (TournamentPlayer player : tournament.getPlayers()) { if (!player.getPlayer().isHuman()) { player.setJoined(); logger.debug("player " + player.getPlayer().getId() + " has joined tournament " + tournament.getId()); ChatManager.instance.broadcast(chatId, "", player.getPlayer().getLogName() + " has joined the tournament", MessageColor.BLACK, true, MessageType.STATUS, null);
int activePlayers = 0; for (Entry<UUID, UUID> entry : userPlayerMap.entrySet()) { TournamentPlayer tournamentPlayer = tournament.getPlayer(entry.getValue()); if (tournamentPlayer != null) { if (!tournamentPlayer.hasQuit()) { Optional<User> user = UserManager.instance.getUser(entry.getKey()); if (!user.isPresent()) { logger.debug("Tournament user is missing but player active -> start quit - tournamentId: " + tournament.getId() + " state: " + tableState.toString()); logger.debug("Tournament player is missing - tournamentId: " + tournament.getId() + " state: " + tableState.toString()); for (TournamentPlayer tournamentPlayer : tournament.getPlayers()) { if (!tournamentPlayer.getPlayer().isHuman()) { if (!tournamentPlayer.hasQuit()) { logger.debug("Tournament has less than 2 active players - tournamentId: " + tournament.getId() + " state: " + tableState.toString()); return false;
table.leaveNotStartedTable(playerId); if (table.isTournament()) { tournament.removePlayer(playerId); } else { match.quitMatch(playerId); if (table.isTournament()) { logger.debug("Quit tournament sub tables for userId: " + userId); TableManager.instance.userQuitTournamentSubTables(tournament.getId(), userId); logger.debug("Quit tournament Id: " + table.getTournament().getId() + '(' + table.getTournament().getTournamentState() + ')'); TournamentManager.instance.quit(tournament.getId(), userId); } else { MatchPlayer matchPlayer = match.getPlayer(playerId);
public boolean watchTable(UUID userId) { if (table.isTournament()) { UserManager.instance.getUser(userId).ifPresent(user -> user.ccShowTournament(table.getTournament().getId())); return true; } else { if (table.isTournamentSubTable() && !table.getTournament().getOptions().isWatchingAllowed()) { return false; } if (table.getState() != TableState.DUELING) { return false; } // you can't watch your own game if (userPlayerMap.get(userId) != null) { return false; } Optional<User> _user = UserManager.instance.getUser(userId); if (!_user.isPresent()) { return false; } return _user.get().ccWatchGame(match.getGame().getId()); } }
private boolean allJoined() { if (!tournament.allJoined()) { return false; } for (TournamentPlayer player : tournament.getPlayers()) { if (player.getPlayer().isHuman() && tournamentSessions.get(player.getPlayer().getId()) == null) { return false; } } 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 synchronized void join(UUID userId) { UUID playerId = userPlayerMap.get(userId); if (playerId == null) { if (logger.isDebugEnabled()) { UserManager.instance.getUser(userId).ifPresent(user -> logger.debug(user.getName() + " shows tournament panel tournamentId: " + tournament.getId())); } return; } if (tournamentSessions.containsKey(playerId)) { logger.debug("player reopened tournament panel userId: " + userId + " tournamentId: " + tournament.getId()); return; } // first join of player TournamentSession tournamentSession = new TournamentSession(tournament, userId, tableId, playerId); tournamentSessions.put(playerId, tournamentSession); Optional<User> _user = UserManager.instance.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()); ChatManager.instance.broadcast(chatId, "", player.getPlayer().getLogName() + " has joined the tournament", MessageColor.BLACK, true, MessageType.STATUS, null); checkStart(); } else { logger.error("User not found userId: " + userId + " tournamentId: " + tournament.getId()); } }
@Override public boolean canJoinTable(Table table) { if (table.isTournament()) { TournamentType tournamentType = table.getTournament().getTournamentType(); if(tournamentType != null && tournamentType.isDraft()) { return true; } } return false; } }
public boolean isRoundOver() { boolean roundIsOver = true; for (TournamentPairing pair: pairs) { if (pair.getMatch() != null) { if (!pair.getMatch().hasEnded()) { roundIsOver = false; } else { if (!pair.isAlreadyPublished()) { tournament.updateResults(); pair.setAlreadyPublished(true); if (tournament instanceof TournamentSingleElimination) { pair.eliminatePlayers(); } // if it's the last round, finish all players for the tournament if their match is finished if (getRoundNumber() == tournament.getNumberRounds()) { pair.finishPlayersThatPlayedLastRound(); } } } } } return roundIsOver; }
private void checkPlayersState() { for (TournamentPlayer tournamentPlayer : tournament.getPlayers()) { if (!tournamentPlayer.isEliminated() && tournamentPlayer.getPlayer().isHuman()) { if (tournamentSessions.containsKey(tournamentPlayer.getPlayer().getId())) { if (tournamentSessions.get(tournamentPlayer.getPlayer().getId()).isKilled()) { tournamentPlayer.setEliminated(); tournamentPlayer.setStateInfo("disconnected"); } } else { tournamentPlayer.setEliminated(); tournamentPlayer.setStateInfo("no tournament session"); } } } }