From c4192f2e33abab9a55ab72a0c9ef4e4021cc37b4 Mon Sep 17 00:00:00 2001 From: sorrelbri Date: Wed, 1 Jul 2020 14:32:03 -0700 Subject: [PATCH] add support for ending game from game record to game service --- packages/server/services/Game.js | 17 +++++++++++++++-- packages/server/services/gameServices.js | 1 - packages/server/socket.js | 16 +++++++++++++++- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/packages/server/services/Game.js b/packages/server/services/Game.js index ac257aa..c0ae5bf 100644 --- a/packages/server/services/Game.js +++ b/packages/server/services/Game.js @@ -181,13 +181,18 @@ const Game = ({ gameData = {}, gameRecord = [] } = {}) => { this.kos = []; }, }; - if (gameRecord.length) { // play through all the moves - return gameRecord.reduce( + const game = gameRecord.reduce( (game, move) => game.makeMove(move), Game({ gameData }).initGame() ); + // ? why is this being wrapped? + if (gameData.gameData.winner) { + const { winner, score } = gameData.gameData; + return game.manualEnd({ winner, score }); + } + return game; } return { winner: gameData.winner || null, @@ -389,6 +394,14 @@ const Game = ({ gameData = {}, gameRecord = [] } = {}) => { this.playerState.bScore - (this.playerState.wScore + this.komi); return { ...this, score, winner: score > 0 ? 1 : -1 }; }, + + // for playing historic games + manualEnd: function ({ winner, score }) { + this.turn = 0; + this.winner = winner; + this.score = score; + return this; + }, }; }; diff --git a/packages/server/services/gameServices.js b/packages/server/services/gameServices.js index 039a4fc..d0c9d4d 100644 --- a/packages/server/services/gameServices.js +++ b/packages/server/services/gameServices.js @@ -11,7 +11,6 @@ const GameService = ({ moveQueries, gameQueries }) => { initGame({ id, gameRecord = [], ...gameData }) { if (gamesInProgress[id]) return this.getDataForUI(id); if (gameRecord.length) { - console.log("here"); gamesInProgress[id] = Game({ gameData, gameRecord }); } else { gamesInProgress[id] = Game({ gameData }).initGame(); diff --git a/packages/server/socket.js b/packages/server/socket.js index 82a2fbd..c308053 100644 --- a/packages/server/socket.js +++ b/packages/server/socket.js @@ -24,8 +24,22 @@ io.on("connection", async (socket) => { socket.on("connect_game", (data) => { const game = `game-${data.game.id}`; socket.join(game, async () => { + const gameData = await gameQueries.findGameById(data.game.id); + const convertWinType = (winType) => { + if (winType.includes("B")) return 1; + if (winType.includes("W")) return -1; + if (winType.includes("0")) return "D"; + return "?"; + }; + gameData.winner = gameData.win_type + ? convertWinType(gameData.win_type) + : 0; const gameRecord = await moveQueries.findGameRecord(data.game.id); - await gameServices.initGame({ id: data.game.id, gameRecord }); + await gameServices.initGame({ + id: data.game.id, + gameRecord, + gameData, + }); const { board, ...meta } = await gameServices.getDataForUI( data.game.id );