improved replays - can now skip forward 10 moves or let the client play through the moves

This commit is contained in:
BetaSteward 2011-09-05 22:12:36 -04:00
parent 6d4c3aa8d9
commit f5c3494723
12 changed files with 142 additions and 20 deletions

View file

@ -858,6 +858,26 @@ public class MageServerImpl implements MageServer {
}
@Override
public void skipForward(final UUID gameId, final String sessionId, final int moves) throws MageException {
if (SessionManager.getInstance().isValidSession(sessionId)) {
try {
callExecutor.execute(
new Runnable() {
@Override
public void run() {
UUID userId = SessionManager.getInstance().getSession(sessionId).getUserId();
ReplayManager.getInstance().skipForward(gameId, userId, moves);
}
}
);
}
catch (Exception ex) {
handleException(ex);
}
}
}
@Override
public ServerState getServerState() throws MageException {
try {
return new ServerState(

View file

@ -68,5 +68,10 @@ public class ReplayManager {
public void previousPlay(UUID gameId, UUID userId) {
replaySessions.get(gameId.toString() + userId.toString()).previous();
}
public void skipForward(UUID gameId, UUID userId, int moves) {
replaySessions.get(gameId.toString() + userId.toString()).next(moves);
}
}

View file

@ -68,7 +68,14 @@ public class ReplaySession implements GameCallback {
updateGame(replay.next(), replay.getGame());
}
public synchronized void previous() {
public synchronized void next(int moves) {
for (int i = 0; i < moves; i++) {
replay.next();
}
updateGame(replay.next(), replay.getGame());
}
public synchronized void previous() {
updateGame(replay.previous(), replay.getGame());
}