var rack = null;
switch (cmd.cmd) {
- case "joinGame":
- if (!gameNumber) {
- gameNumber = newGameId();
- }
+ case "joinGame":
+ if (!gameNumber) {
+ gameNumber = newGameId();
+ }
- if (!game) {
- game = games[gameNumber] = new Game();
- }
+ if (!game) {
+ game = games[gameNumber] = new Game();
+ }
- game.playerJoined(playerName);
+ game.playerJoined(playerName);
- response.write(
- JSON.stringify({
- "error":0,
- "gameNumber": gameNumber,
- "playerName": playerName,
- "rack": game.getPlayerRack(playerName),
- "board": game.board,
- "remainingLetters": game.remainingLetters,
- "letterValues": frValues,
- "date": dateNow,
- "sync": false
- })
+ response.write(
+ JSON.stringify({
+ "error":0,
+ "gameNumber": gameNumber,
+ "playerName": playerName,
+ "rack": game.getPlayerRack(playerName),
+ "board": game.board,
+ "remainingLetters": game.remainingLetters,
+ "letterValues": frValues,
+ "date": dateNow,
+ "sync": false
+ })
);
- break;
-
- case "hello":
- game.playerJoined(playerName);
- break;
+ break;
- case "sync":
- response.write(
- JSON.stringify({
- "error":0,
- "gameNumber": gameNumber,
- "playerName": playerName,
- "rack": game.getPlayerRack(playerName),
- "board": game.board,
- "remainingLetters": game.remainingLetters,
- "letterValues": frValues,
- "date": dateNow,
- "sync": true
- })
- );
- break;
+ case "hello":
+ game.playerJoined(playerName);
+ break;
- case "score":
- game.setPlayerScore(cmd.player, cmd.score);
- response.write("{\"error\":0}");
- break;
+ case "sync":
+ response.write(
+ JSON.stringify({
+ "error":0,
+ "gameNumber": gameNumber,
+ "playerName": playerName,
+ "rack": game.getPlayerRack(playerName),
+ "board": game.board,
+ "remainingLetters": game.remainingLetters,
+ "letterValues": frValues,
+ "date": dateNow,
+ "sync": true
+ })
+ );
+ break;
- case "moveLetter":
- var letter = "";
+ case "score":
+ game.setPlayerScore(cmd.player, cmd.score);
+ response.write("{\"error\":0}");
+ break;
- switch (cmd.from) {
- case "rack":
- rack = game.getPlayerRack(playerName);
+ case "moveLetter":
+ var letter = "";
- letter = rack[cmd.indexFrom];
- rack[cmd.indexFrom] = "";
- break;
+ switch (cmd.from) {
+ case "rack":
+ rack = game.getPlayerRack(playerName);
- case "board":
- if (cmd.indexFrom < 15 * 15) {
- letter = game.getCell(cmd.indexFrom);
- game.setCell(cmd.indexFrom, "", playerName);
- }
- break;
+ letter = rack[cmd.indexFrom];
+ rack[cmd.indexFrom] = "";
+ break;
- case "bag":
- letter = game.bagPopLetter(playerName);
- break;
+ case "board":
+ if (cmd.indexFrom < 15 * 15) {
+ letter = game.getCell(cmd.indexFrom);
+ game.setCell(cmd.indexFrom, "", playerName);
+ }
+ break;
- default:
- response.write("{\"error\":1, \"reason\":\"Moving letter from an unknown place\"}");
- return;
- }
+ case "bag":
+ letter = game.bagPopLetter(playerName);
+ break;
- switch (cmd.to) {
- case "rack":
- if (cmd.indexTo > 7) {
- response.write("{\"error\":1, \"reason\":\"Moving letter to a index which is too high\"}");
+ default:
+ response.write("{\"error\":1, \"reason\":\"Moving letter from an unknown place\"}");
return;
- }
-
- rack = rack || game.getPlayerRack(playerName);
- rack[cmd.indexTo] = letter;
- break;
-
- case "board":
- if (cmd.indexTo < 15 * 15) {
- game.setCell(cmd.indexTo, letter, playerName);
- }
- break;
-
- case "bag":
- game.bagPushLetter(letter, playerName);
- break;
-
- default:
- switch (cmd.from) {
- case "rack":
- rack[cmd.indexFrom] = letter;
- break;
-
- case "board":
- game.setCell(cmd.indexFrom, letter, playerName);
- break;
+ }
- case "bag":
- game.bagPushLetter(letter, playerName);
- break;
+ switch (cmd.to) {
+ case "rack":
+ if (cmd.indexTo > 7) {
+ response.write("{\"error\":1, \"reason\":\"Moving letter to a index which is too high\"}");
+ return;
+ }
- default:
- console.error("BUG: code should not have been reached.");
- }
+ rack = rack || game.getPlayerRack(playerName);
+ rack[cmd.indexTo] = letter;
+ break;
- response.write("{\"error\":1, \"reason\":\"Moving letter to an unknown place\"}");
- return;
- }
+ case "board":
+ if (cmd.indexTo < 15 * 15) {
+ game.setCell(cmd.indexTo, letter, playerName);
+ }
+ break;
- response.write(
- JSON.stringify({
- error:0,
- letter: letter,
- action: "moveLetter",
- indexTo: typeof cmd.indexTo === "number" ? cmd.indexTo : -1,
- from: cmd.from,
- to: cmd.to,
- indexFrom: typeof cmd.indexFrom === "number" ? cmd.indexFrom : -1,
- remainingLetters: game.remainingLetters,
- date: dateNow
- })
- );
+ case "bag":
+ game.bagPushLetter(letter, playerName);
+ break;
- if (rack) {
- game.pendingEvents.push({
- players: [{
- player: playerName,
- rackCount: countTiles(rack)
- }],
- date: dateNow
- });
- }
- break;
+ default:
+ switch (cmd.from) {
+ case "rack":
+ rack[cmd.indexFrom] = letter;
+ break;
- case "setRack":
- cmd.rack.length = 8;
+ case "board":
+ game.setCell(cmd.indexFrom, letter, playerName);
+ break;
- rack = game.getPlayerRack(playerName);
+ case "bag":
+ game.bagPushLetter(letter, playerName);
+ break;
- var initialRackCount = countTiles(rack);
- var rackCount = countTiles(cmd.rack);
+ default:
+ console.error("BUG: code should not have been reached.");
+ }
- debuglog(rack, cmd.rack);
+ response.write("{\"error\":1, \"reason\":\"Moving letter to an unknown place\"}");
+ return;
+ }
- if (initialRackCount !== rackCount) {
response.write(
JSON.stringify({
- error: 1,
- rack: rack,
- reason: "the new rack doesn't contain the same number of letters",
+ error:0,
+ letter: letter,
+ action: "moveLetter",
+ indexTo: typeof cmd.indexTo === "number" ? cmd.indexTo : -1,
+ from: cmd.from,
+ to: cmd.to,
+ indexFrom: typeof cmd.indexFrom === "number" ? cmd.indexFrom : -1,
+ remainingLetters: game.remainingLetters,
date: dateNow
})
);
+
+ if (rack) {
+ game.pendingEvents.push({
+ players: [{
+ player: playerName,
+ rackCount: countTiles(rack)
+ }],
+ date: dateNow
+ });
+ }
break;
- }
- var oldRack = rack.slice();
+ case "setRack":
+ cmd.rack.length = 8;
+ rack = game.getPlayerRack(playerName);
- for (let i = 0; i < 8; i++) {
- cmd.rack[i] = (cmd.rack[i] || "")[0] || "";
- if (cmd.rack[i]) {
- var indexLetter = oldRack.indexOf(cmd.rack[i]);
+ var initialRackCount = countTiles(rack);
+ var rackCount = countTiles(cmd.rack);
- if (indexLetter === -1) {
- response.write(
- JSON.stringify({
- error: 1,
- rack: rack,
- reason: "the new rack is not a permutation of the old rack",
- date: dateNow
- })
- );
- break;
+ debuglog(rack, cmd.rack);
+
+ if (initialRackCount !== rackCount) {
+ response.write(
+ JSON.stringify({
+ error: 1,
+ rack: rack,
+ reason: "the new rack doesn't contain the same number of letters",
+ date: dateNow
+ })
+ );
+ break;
+ }
+
+ var oldRack = rack.slice();
+
+
+ for (let i = 0; i < 8; i++) {
+ cmd.rack[i] = (cmd.rack[i] || "")[0] || "";
+ if (cmd.rack[i]) {
+ var indexLetter = oldRack.indexOf(cmd.rack[i]);
+
+ if (indexLetter === -1) {
+ response.write(
+ JSON.stringify({
+ error: 1,
+ rack: rack,
+ reason: "the new rack is not a permutation of the old rack",
+ date: dateNow
+ })
+ );
+ break;
+ }
+ oldRack[indexLetter] = false;
}
- oldRack[indexLetter] = false;
}
- }
- for (let i = 0; i < 8; i++) {
- rack[i] = cmd.rack[i];
- }
+ for (let i = 0; i < 8; i++) {
+ rack[i] = cmd.rack[i];
+ }
- response.write(
- JSON.stringify({
- error: 0,
- rack: rack,
- date: dateNow
- })
- );
+ response.write(
+ JSON.stringify({
+ error: 0,
+ rack: rack,
+ date: dateNow
+ })
+ );
- break;
- case "resetGame":
- game.reset();
- response.write("{\"error\":0}");
- break;
-
- case "msg":
- game.pendingEvents.push({
- msg: {
- sender: playerName,
- content: cmd.msg
- },
- date: dateNow
- });
- response.write("{\"error\":0}");
- break;
+ break;
+ case "resetGame":
+ game.reset();
+ response.write("{\"error\":0}");
+ break;
- default:
- response.write("{\"error\":1,\"reason\":\"Unknown command\"}");
- break;
+ case "msg":
+ game.pendingEvents.push({
+ msg: {
+ sender: playerName,
+ content: cmd.msg
+ },
+ date: dateNow
+ });
+ response.write("{\"error\":0}");
+ break;
+
+ default:
+ response.write("{\"error\":1,\"reason\":\"Unknown command\"}");
+ break;
}
}