Load server data on startup
This commit is contained in:
parent
3895082c65
commit
fc849d2b0d
@ -17,9 +17,9 @@ public class Game {
|
||||
|
||||
public final int id;
|
||||
|
||||
private Player host;
|
||||
private Player playerOne;
|
||||
|
||||
private Player challenger;
|
||||
private Player playerTwo;
|
||||
|
||||
private Set<String> acceptableGuesses;
|
||||
|
||||
@ -31,7 +31,7 @@ public class Game {
|
||||
|
||||
public Game(Player host) {
|
||||
this.id = idCounter.incrementAndGet();
|
||||
this.host = host;
|
||||
this.playerOne = host;
|
||||
}
|
||||
|
||||
private static int indexOf(char[] array, char searchTerm) {
|
||||
@ -80,12 +80,12 @@ public class Game {
|
||||
return result;
|
||||
}
|
||||
|
||||
public Player getChallenger() {
|
||||
return challenger;
|
||||
public Player getPlayerOne() {
|
||||
return playerOne;
|
||||
}
|
||||
|
||||
public Player getHost() {
|
||||
return host;
|
||||
public Player getPlayerTwo() {
|
||||
return playerTwo;
|
||||
}
|
||||
|
||||
public String newGame() {
|
||||
@ -103,12 +103,12 @@ public class Game {
|
||||
this.acceptableGuesses = value;
|
||||
}
|
||||
|
||||
public void setChallenger(Player value) {
|
||||
this.challenger = value;
|
||||
public void setPlayerOne(Player value) {
|
||||
this.playerOne = value;
|
||||
}
|
||||
|
||||
public void setHost(Player value) {
|
||||
this.host = value;
|
||||
public void setPlayerTwo(Player value) {
|
||||
this.playerTwo = value;
|
||||
}
|
||||
|
||||
public void setPossibleWords(List<String> value) {
|
||||
|
@ -22,4 +22,12 @@ public class Player {
|
||||
this.username = username;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
if (username != null) {
|
||||
return username;
|
||||
}
|
||||
return sessionId;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -81,7 +81,7 @@ public class LingoController implements ApplicationListener<AbstractSubProtocolE
|
||||
return;
|
||||
}
|
||||
guess = guess.toUpperCase();
|
||||
log.info("{} guessed {}", sessionId, guess);
|
||||
log.info("{} guessed {}", player, guess);
|
||||
final Game game = gameByPlayer.get(player);
|
||||
final int[] result = game.evaluate(guess);
|
||||
|
||||
@ -103,10 +103,10 @@ public class LingoController implements ApplicationListener<AbstractSubProtocolE
|
||||
opponentReport.setResult(result);
|
||||
}
|
||||
final Player opponent;
|
||||
if (sessionId.equals(game.getHost().getSessionId())) {
|
||||
opponent = game.getChallenger();
|
||||
if (sessionId.equals(game.getPlayerOne().getSessionId())) {
|
||||
opponent = game.getPlayerTwo();
|
||||
} else {
|
||||
opponent = game.getHost();
|
||||
opponent = game.getPlayerOne();
|
||||
}
|
||||
sendToPlayer(player, Destinations.PLAYER_REPORTS, playerReport);
|
||||
sendToPlayer(opponent, Destinations.OPPONENT_REPORTS, opponentReport);
|
||||
@ -121,13 +121,13 @@ public class LingoController implements ApplicationListener<AbstractSubProtocolE
|
||||
return;
|
||||
}
|
||||
if (gameByPlayer.containsKey(player)) {
|
||||
log.warn("{} is in a game already", username);
|
||||
log.warn("{} is in a game already", player);
|
||||
return;
|
||||
}
|
||||
final Game game = new Game(player);
|
||||
gameById.put(game.id, game);
|
||||
gameByPlayer.put(player, game);
|
||||
log.info("{} hosted a game", username);
|
||||
log.info("{} hosted a game", player);
|
||||
send(Destinations.GAME_HOSTED, game);
|
||||
}
|
||||
|
||||
@ -140,7 +140,7 @@ public class LingoController implements ApplicationListener<AbstractSubProtocolE
|
||||
return;
|
||||
}
|
||||
if (gameByPlayer.containsKey(player)) {
|
||||
log.warn("{} is in a game already", username);
|
||||
log.warn("{} is in a game already", player);
|
||||
return;
|
||||
}
|
||||
final Game game = gameById.get(gameId);
|
||||
@ -148,10 +148,10 @@ public class LingoController implements ApplicationListener<AbstractSubProtocolE
|
||||
log.warn("No game with id {}", gameId);
|
||||
return;
|
||||
}
|
||||
if (game.getChallenger() == null) {
|
||||
game.setChallenger(player);
|
||||
if (game.getPlayerTwo() == null) {
|
||||
game.setPlayerTwo(player);
|
||||
gameByPlayer.put(player, game);
|
||||
log.info("{} joined {}'s game", username, game.getHost());
|
||||
log.info("{} joined {}'s game", player, game.getPlayerOne());
|
||||
send(Destinations.GAME_JOINED, game);
|
||||
|
||||
// Start the game immediately
|
||||
@ -161,8 +161,8 @@ public class LingoController implements ApplicationListener<AbstractSubProtocolE
|
||||
final String firstWord = game.newGame();
|
||||
final String firstLetter = String.valueOf(firstWord.charAt(0));
|
||||
log.info("First word: {}", firstWord);
|
||||
final Player playerOne = game.getHost();
|
||||
final Player playerTwo = game.getChallenger();
|
||||
final Player playerOne = game.getPlayerOne();
|
||||
final Player playerTwo = game.getPlayerTwo();
|
||||
final String[] playerOneMessage = new String[] { firstLetter, playerTwo.getUsername() };
|
||||
final String[] playerTwoMessage = new String[] { firstLetter, playerOne.getUsername() };
|
||||
sendToPlayer(playerOne, Destinations.OPPONENT_JOINED, playerOneMessage);
|
||||
@ -191,29 +191,29 @@ public class LingoController implements ApplicationListener<AbstractSubProtocolE
|
||||
final Player player = playerBySession.get(sessionId);
|
||||
final Game game = gameByPlayer.remove(player);
|
||||
if (game == null) {
|
||||
log.warn("{} is not in a game", player.getUsername());
|
||||
log.warn("{} is not in a game", player);
|
||||
return;
|
||||
}
|
||||
leaveGame(game, player);
|
||||
}
|
||||
|
||||
private synchronized void leaveGame(Game game, Player player) {
|
||||
final Player gameHost = game.getHost();
|
||||
final Player gameChallenger = game.getChallenger();
|
||||
if (gameHost == player) {
|
||||
if (gameChallenger == null) {
|
||||
final Player playerOne = game.getPlayerOne();
|
||||
final Player playerTwo = game.getPlayerTwo();
|
||||
if (playerOne == player) {
|
||||
if (playerTwo == null) {
|
||||
// Close the game
|
||||
gameById.remove(game.id);
|
||||
send(Destinations.GAME_CLOSED, game);
|
||||
} else {
|
||||
// Leave the game
|
||||
game.setHost(gameChallenger);
|
||||
game.setChallenger(null);
|
||||
game.setPlayerOne(playerTwo);
|
||||
game.setPlayerTwo(null);
|
||||
send(Destinations.GAME_LEFT, new GameLeftMessage(game, player));
|
||||
}
|
||||
} else if (gameChallenger == player) {
|
||||
} else if (playerTwo == player) {
|
||||
// Leave the game
|
||||
game.setChallenger(null);
|
||||
game.setPlayerTwo(null);
|
||||
send(Destinations.GAME_LEFT, new GameLeftMessage(game, player));
|
||||
}
|
||||
}
|
||||
@ -262,7 +262,7 @@ public class LingoController implements ApplicationListener<AbstractSubProtocolE
|
||||
public void practiceGuess(String guess, @Header(SESSION_ID_HEADER) String sessionId) {
|
||||
final Player player = playerBySession.get(sessionId);
|
||||
guess = guess.toUpperCase();
|
||||
log.info("{} guessed {}", sessionId, guess);
|
||||
log.info("{} guessed {}", player, guess);
|
||||
final Game game = practiceByPlayer.get(player);
|
||||
final int[] result = game.evaluate(guess);
|
||||
|
||||
|
@ -132,6 +132,20 @@ function start() {
|
||||
reset();
|
||||
repaint();
|
||||
|
||||
// Load initial data
|
||||
doHttpGet('/games', function(games) {
|
||||
for (var i = 0; i < games.length; i++) {
|
||||
var game = games[i];
|
||||
vm.games.push({
|
||||
id: game.id,
|
||||
playerOne: game.playerOne.username,
|
||||
playerTwo: game.playerTwo ? game.playerTwo.username : null,
|
||||
started: game.playerTwo !== null
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// Subscribe to updates
|
||||
client.subscribe('/topic/chat', onChat);
|
||||
client.subscribe('/topic/gameClosed', onGameClosed);
|
||||
client.subscribe('/topic/gameHosted', onGameHosted);
|
||||
@ -230,6 +244,18 @@ function addMessageItem(messageList, messageItem) {
|
||||
messageList.scrollTop = messageList.scrollHeight;
|
||||
}
|
||||
|
||||
function doHttpGet(url, callback) {
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.onreadystatechange = function() {
|
||||
if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
|
||||
var response = JSON.parse(xhr.responseText);
|
||||
callback(response);
|
||||
}
|
||||
};
|
||||
xhr.open('GET', url, true);
|
||||
xhr.send();
|
||||
}
|
||||
|
||||
function drawMyBoard() {
|
||||
var x = 25, y = MARGIN_TOP;
|
||||
drawUsername(x, y, myUsername);
|
||||
@ -437,42 +463,42 @@ function onChat(message) {
|
||||
function onGameClosed(message) {
|
||||
var game = JSON.parse(message.body);
|
||||
var gameId = game.id;
|
||||
var gameHost = game.host.username;
|
||||
if (gameHost === myUsername) {
|
||||
var playerOne = game.playerOne.username;
|
||||
if (playerOne === myUsername) {
|
||||
vm.gameId = null;
|
||||
}
|
||||
console.log(gameHost + ' closed Game ' + gameId);
|
||||
console.log(playerOne + ' closed Game ' + gameId);
|
||||
removeGame(gameId);
|
||||
}
|
||||
|
||||
function onGameHosted(message) {
|
||||
var game = JSON.parse(message.body);
|
||||
var gameId = game.id;
|
||||
var gameHost = game.host.username;
|
||||
if (gameHost === myUsername) {
|
||||
var playerOne = game.playerOne.username;
|
||||
if (playerOne === myUsername) {
|
||||
vm.gameId = gameId;
|
||||
}
|
||||
console.log(gameHost + ' hosted Game ' + gameId);
|
||||
vm.games.push({ id: gameId, playerOne: gameHost, started: false });
|
||||
console.log(playerOne + ' hosted Game ' + gameId);
|
||||
vm.games.push({ id: gameId, playerOne: playerOne, started: false });
|
||||
}
|
||||
|
||||
function onGameJoined(message) {
|
||||
var game = JSON.parse(message.body);
|
||||
var gameId = game.id;
|
||||
var gameHost = game.host.username;
|
||||
var gameChallenger = game.challenger.username;
|
||||
if (gameChallenger === myUsername) {
|
||||
var playerOne = game.playerOne.username;
|
||||
var playerTwo = game.playerTwo.username;
|
||||
if (playerTwo === myUsername) {
|
||||
vm.gameId = gameId;
|
||||
}
|
||||
console.log(gameChallenger + ' joined ' + gameHost + "'s game");
|
||||
console.log(playerTwo + ' joined ' + playerOne + "'s game");
|
||||
for (var i = 0; i < vm.games.length; i++) {
|
||||
if (vm.games[i].id === gameId) {
|
||||
vm.games[i].playerTwo = gameChallenger;
|
||||
vm.games[i].playerTwo = playerTwo;
|
||||
vm.games[i].started = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (gameHost === myUsername || gameChallenger === myUsername) {
|
||||
if (playerOne === myUsername || playerTwo === myUsername) {
|
||||
toggleView();
|
||||
}
|
||||
}
|
||||
@ -481,20 +507,20 @@ function onGameLeft(message) {
|
||||
var report = JSON.parse(message.body);
|
||||
var game = report.game;
|
||||
var gameId = game.id;
|
||||
var gameHost = game.host.username;
|
||||
var playerOne = game.playerOne.username;
|
||||
var gameLeaver = report.gameLeaver.username;
|
||||
var previousPlayers = [];
|
||||
for (var i = 0; i < vm.games.length; i++) {
|
||||
if (vm.games[i].id === gameId) {
|
||||
previousPlayers.push(vm.games[i].playerOne);
|
||||
previousPlayers.push(vm.games[i].playerTwo);
|
||||
vm.games[i].playerOne = gameHost;
|
||||
vm.games[i].playerTwo = game.challenger ? game.challenger.username : null;
|
||||
vm.games[i].playerOne = playerOne;
|
||||
vm.games[i].playerTwo = game.playerTwo ? game.playerTwo.username : null;
|
||||
vm.games[i].started = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
console.log(gameLeaver + ' left ' + gameHost + "'s game");
|
||||
console.log(gameLeaver + ' left ' + playerOne + "'s game");
|
||||
if (gameLeaver === myUsername) {
|
||||
vm.gameId = null;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user