Improved player quits / leaves mage handling for tournaments (not perfect yet, will more improve it).

This commit is contained in:
LevelX2 2013-07-18 17:40:06 +02:00
parent 0d1e45fff6
commit 85b8edf630
12 changed files with 155 additions and 34 deletions

View file

@ -584,6 +584,17 @@ public class MageServerImpl implements MageServer {
});
}
@Override
public void quitTournament(final UUID tournamentId, final String sessionId) throws MageException {
execute("quitTournament", sessionId, new Action() {
@Override
public void execute() {
UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
TournamentManager.getInstance().quit(tournamentId, userId);
}
});
}
@Override
public void undo(final UUID gameId, final String sessionId) throws MageException {
execute("undo", sessionId, new Action() {

View file

@ -45,6 +45,7 @@ import mage.game.match.MatchOptions;
import mage.game.tournament.Tournament;
import mage.game.tournament.TournamentPairing;
import mage.game.tournament.TournamentPlayer;
import mage.players.Player;
import mage.server.ChatManager;
import mage.server.TableManager;
import mage.server.UserManager;
@ -237,10 +238,10 @@ public class TournamentController {
public void submitDeck(UUID playerId, Deck deck) {
if (tournamentSessions.containsKey(playerId)) {
TournamentPlayer player = tournament.getPlayer(playerId);
if (player != null) {
if (player != null && !player.hasQuit()) {
tournamentSessions.get(playerId).submitDeck(deck);
ChatManager.getInstance().broadcast(chatId, "", player.getPlayer().getName() + " has submitted his tournament deck", MessageColor.BLACK);
}
tournamentSessions.get(playerId).submitDeck(deck);
}
}
}
@ -257,23 +258,37 @@ public class TournamentController {
}
}
// public UUID getSessionId() {
// return this.sessionId;
// }
public UUID getChatId() {
return chatId;
}
public void kill(UUID userId) {
if (userPlayerMap.containsKey(userId)) {
tournamentSessions.get(userPlayerMap.get(userId)).setKilled();
tournamentSessions.remove(userPlayerMap.get(userId));
leave(userId);
userPlayerMap.remove(userId);
public void quit(UUID userId) {
UUID playerId = userPlayerMap.get(userId);
if (playerId != null) {
TournamentPlayer player = tournament.getPlayer(playerId);
if (player != null) {
ChatManager.getInstance().broadcast(chatId, "", player.getPlayer().getName() + " has quit the tournament", MessageColor.BLACK);
String info;
if (tournament.isDoneConstructing()) {
info = new StringBuilder("during round ").append(tournament.getRounds().size()).toString();
} else {
info = "during Construction phase";
}
player.setQuit(info);
}
}
}
public void kill(UUID userId) {
quit(userId);
// if (userPlayerMap.containsKey(userId)) {
// tournamentSessions.get(userPlayerMap.get(userId)).setKilled();
// tournamentSessions.remove(userPlayerMap.get(userId));
// leave(userId);
// userPlayerMap.remove(userId);
// }
}
private void leave(UUID userId) {
tournament.leave(getPlayerId(userId));
}

View file

@ -57,6 +57,11 @@ public class TournamentManager {
controllers.get(tournamentId).join(userId);
}
public void quit(UUID tournamentId, UUID userId) {
controllers.get(tournamentId).quit(userId);
}
public void kill(UUID tournamentId, UUID userId) {
controllers.get(tournamentId).kill(userId);
}

View file

@ -121,6 +121,7 @@ public class TournamentSession {
public void setKilled() {
killed = true;
TournamentManager.getInstance().kill(tournament.getId(), userId);
}
private synchronized void setupTimeout(int seconds) {