added watch game methods

This commit is contained in:
betasteward 2015-07-11 07:40:06 -04:00
parent 8225a4080c
commit 4bb7ffd452
22 changed files with 235 additions and 114 deletions

View file

@ -703,55 +703,30 @@ public class ServerMain implements MageServer {
GameManager.getInstance().sendPlayerAction(playerAction, gameId, session.getUserId(), data);
}
// @Override
// public boolean watchTable(final String sessionId, final UUID roomId, final UUID tableId) throws MageException {
// return executeWithResult("setUserData", sessionId, new ActionWithBooleanResult() {
// @Override
// public Boolean execute() throws MageException {
// UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
// return GamesRoomManager.getInstance().getRoom(roomId).watchTable(userId, tableId);
// }
// });
// }
//
// @Override
// public boolean watchTournamentTable(final String sessionId, final UUID tableId) throws MageException {
// return executeWithResult("setUserData", sessionId, new ActionWithBooleanResult() {
// @Override
// public Boolean execute() throws MageException {
// UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
// return TableManager.getInstance().watchTable(userId, tableId);
// }
// });
// }
//
// @Override
// public void watchGame(final UUID gameId, final String sessionId) throws MageException {
// execute("watchGame", sessionId, new Action() {
// @Override
// public void execute() {
// UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
// GameManager.getInstance().watchGame(gameId, userId);
// }
// });
// }
//
// @Override
// public void stopWatching(final UUID gameId, final String sessionId) throws MageException {
// execute("stopWatching", sessionId, new Action() {
// @Override
// public void execute() {
// UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
// User user = UserManager.getInstance().getUser(userId);
// if (user != null) {
// GameManager.getInstance().stopWatching(gameId, userId);
// user.removeGameWatchInfo(gameId);
// }
//
// }
// });
// }
//
@Override
public void watchTable(final String sessionId, final UUID roomId, final UUID tableId) {
UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
GamesRoomManager.getInstance().getRoom(roomId).watchTable(userId, tableId);
}
@Override
public void watchTournamentTable(final String sessionId, final UUID tableId) {
UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
TableManager.getInstance().watchTable(userId, tableId);
}
@Override
public void stopWatching(final UUID gameId, final String sessionId) {
UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
User user = UserManager.getInstance().getUser(userId);
if (user != null) {
GameManager.getInstance().stopWatching(gameId, userId);
user.removeGameWatchInfo(gameId);
}
}
// @Override
// public void replayGame(final UUID gameId, final String sessionId) throws MageException {
// execute("replayGame", sessionId, new Action() {
@ -1244,24 +1219,12 @@ public class ServerMain implements MageServer {
server.showTournament(sessionId, tournamentId);
}
// public void tournamentInit(String sessionId, UUID tournamentId, TournamentView tournamentView) {
// server.tournamentInit(sessionId, tournamentId, tournamentView);
// }
// public void tournamentUpdate(String sessionId, UUID tournamentId, TournamentView tournamentView) {
// server.tournamentUpdate(sessionId, tournamentId, tournamentView);
// }
//
// public void tournamentOver(String sessionId, UUID tournamentId) {
// server.tournamentOver(sessionId, tournamentId);
// }
public void showGameEndDialog(String sessionId, UUID gameId) {
server.showGameEndDialog(sessionId, gameId);
}
public void watchGame(String sessionId, UUID gameId) {
server.watchGame(sessionId, gameId);
public void watchGame(String sessionId, UUID gameId, UUID chatId, GameView game) {
server.watchGame(sessionId, gameId, chatId, game);
}
public void replayGame(String sessionId, UUID gameId) {

View file

@ -434,22 +434,21 @@ public class TableController {
}
}
public boolean watchTable(UUID userId) {
public void watchTable(UUID userId) {
if (table.isTournament()) {
UserManager.getInstance().getUser(userId).showTournament(table.getTournament().getId());
return true;
} else {
if (table.isTournamentSubTable() && !table.getTournament().getOptions().isWatchingAllowed()) {
return false;
return;
}
if (table.getState() != TableState.DUELING) {
return false;
return;
}
// you can't watch your own game
if (userPlayerMap.get(userId) != null) {
return false;
return;
}
return UserManager.getInstance().getUser(userId).watchGame(match.getGame().getId());
UserManager.getInstance().getUser(userId).watchGame(match.getGame().getId(), getChatId());
}
}

View file

@ -270,11 +270,10 @@ public class TableManager {
}
}
public boolean watchTable(UUID userId, UUID tableId) {
public void watchTable(UUID userId, UUID tableId) {
if (controllers.containsKey(tableId)) {
return controllers.get(tableId).watchTable(userId);
controllers.get(tableId).watchTable(userId);
}
return false;
}
// public boolean replayTable(UUID userId, UUID tableId) {

View file

@ -330,9 +330,10 @@ public class User {
ServerMain.getInstance().informClient(sessionId, title, message, MessageType.ERROR);
}
public boolean watchGame(final UUID gameId) {
ServerMain.getInstance().watchGame(sessionId, gameId);
return true;
public void watchGame(final UUID gameId, UUID chatId) {
GameView game = GameManager.getInstance().watchGame(gameId, userId);
if (game != null)
ServerMain.getInstance().watchGame(sessionId, gameId, chatId, game);
}
public void replayGame(final UUID gameId) {

View file

@ -433,14 +433,14 @@ public class GameController implements GameCallback {
return true;
}
public void watch(UUID userId) {
public GameView watch(UUID userId) {
if (userPlayerMap.get(userId) != null) {
// You can't watch a game if you already a player in it
return;
return null;
}
if (watchers.get(userId) != null) {
// You can't watch a game if you already watch it
return;
return null;
}
User user = UserManager.getInstance().getUser(userId);
if (user != null) {
@ -449,7 +449,9 @@ public class GameController implements GameCallback {
gameWatcher.init();
user.addGameWatchInfo(game.getId());
ChatManager.getInstance().broadcast(chatId, user, " has started watching", MessageColor.BLUE, true, ChatMessage.MessageType.STATUS);
return watchers.get(userId).getGameView();
}
return null;
}
public void stopWatching(UUID userId) {

View file

@ -122,11 +122,12 @@ public class GameManager {
}
}
public void watchGame(UUID gameId, UUID userId) {
public GameView watchGame(UUID gameId, UUID userId) {
GameController gameController = gameControllers.get(gameId);
if (gameController != null) {
gameController.watch(userId);
return gameController.watch(userId);
}
return null;
}
public void stopWatching(UUID gameId, UUID userId) {

View file

@ -29,7 +29,6 @@
package mage.server.game;
import java.util.UUID;
import mage.MageException;
import mage.cards.decks.DeckCardLists;
import mage.game.match.MatchOptions;
import mage.game.tournament.TournamentOptions;
@ -51,7 +50,7 @@ public interface GamesRoom extends Room {
void removeTable(UUID tableId);
TableView getTable(UUID tableId);
void leaveTable(UUID userId, UUID tableId);
boolean watchTable(UUID userId, UUID tableId) throws MageException;
void watchTable(UUID userId, UUID tableId);
public RoomView getRoomView();

View file

@ -39,7 +39,6 @@ import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import mage.MageException;
import mage.cards.decks.DeckCardLists;
import mage.constants.TableState;
import mage.game.Table;
@ -200,8 +199,8 @@ public class GamesRoomImpl extends RoomImpl implements GamesRoom, Serializable {
}
@Override
public boolean watchTable(UUID userId, UUID tableId) throws MageException {
return TableManager.getInstance().watchTable(userId, tableId);
public void watchTable(UUID userId, UUID tableId) {
TableManager.getInstance().watchTable(userId, tableId);
}
@Override