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