From 7aed5b7bf96e17a698c510b2b38629a9e74cd191 Mon Sep 17 00:00:00 2001 From: Sorrel Bri Date: Mon, 4 May 2020 23:22:50 -0700 Subject: [PATCH] connect new Game module to service and update frontend connections --- packages/play-node-go/src/io.js | 2 +- packages/play-node-go/src/pages/Game/Game.js | 2 +- .../src/reducers/games/reducer.games.js | 4 ++-- packages/server/services/Game.js | 18 ++++++++++-------- packages/server/services/gameServices.js | 14 ++++++++++++-- packages/server/socket.js | 13 ++++++------- packages/server/test/gameServices.spec.js | 2 ++ 7 files changed, 34 insertions(+), 21 deletions(-) diff --git a/packages/play-node-go/src/io.js b/packages/play-node-go/src/io.js index 0797ecd..7bc8d7c 100644 --- a/packages/play-node-go/src/io.js +++ b/packages/play-node-go/src/io.js @@ -32,7 +32,7 @@ const launch = (nsp, dispatch) => { socket.on('update_board', (data) => { console.log(data) console.log('update_board received') - dispatch({ type: 'GAMES', message: 'UPDATE_BOARD', body: data.board }) + dispatch({ type: 'GAMES', message: 'UPDATE_BOARD', body: data }) }) return socket; diff --git a/packages/play-node-go/src/pages/Game/Game.js b/packages/play-node-go/src/pages/Game/Game.js index 0241e2d..221f572 100644 --- a/packages/play-node-go/src/pages/Game/Game.js +++ b/packages/play-node-go/src/pages/Game/Game.js @@ -39,7 +39,7 @@ const Game = (props) => { return dispatch(action); } roomSocketConnect(); - }, [ state.active , dispatch, state.user ] ) + }, [ state.active.game.open , dispatch, state.user ] ) return (
{ return {...state, joinGame: id}; case 'UPDATE_BOARD': - console.log(action.body) - return {...state, board: action.body}; + const { gameRecord, pass, turn, winner, playerState } = action.body.meta; + return {...state, board: action.body.board, active: { game: {...state.active.game, gameRecord, pass, turn, winner, playerState } } }; case 'SET_ACTIVE': return {...state, active: action.body}; diff --git a/packages/server/services/Game.js b/packages/server/services/Game.js index db31308..1bbe763 100644 --- a/packages/server/services/Game.js +++ b/packages/server/services/Game.js @@ -164,6 +164,15 @@ const initBoard = (game) => { // returns Game object const Game = ({gameData = {}, gameRecord = []} = {}) => { + const helper = { + clearKo: function() { + this.kos.forEach(ko => { + this.boardState[ko] = { ...this.boardState[ko], legal: true, ko: false }; + }) + this.kos = []; + }, + } + if (gameRecord.length) { // play through all the moves return gameRecord.reduce((game, move) => game.makeMove(move), Game({gameData}).initGame()) @@ -214,13 +223,6 @@ const Game = ({gameData = {}, gameRecord = []} = {}) => { komi: this.komi } }, - - clearKo: function() { - this.kos.forEach(ko => { - this.boardState[ko] = { ...this.boardState[ko], legal: true, ko: false }; - }) - this.kos = []; - }, makeMove: function({ player, pos: {x, y}}) { let game = this; @@ -231,7 +233,7 @@ const Game = ({gameData = {}, gameRecord = []} = {}) => { if (isTurn) { if (point.legal) { game.addToRecord({ player, pos: { x, y } }); - if (this.kos.length) this.clearKo(); + if (this.kos.length) helper.clearKo.call(this); point.makeMove(game); game.turn *= -1; success = true; diff --git a/packages/server/services/gameServices.js b/packages/server/services/gameServices.js index 10dca77..1db5489 100644 --- a/packages/server/services/gameServices.js +++ b/packages/server/services/gameServices.js @@ -7,13 +7,16 @@ const storeGame = (game) => { } const initGame = ({id, gameRecord = [], ...gameData}) => { + if (gamesInProgress[id]) return getDataForUI(id); gamesInProgress[id] = Game({ gameData, gameRecord }) gamesInProgress[id].initGame(); return getDataForUI(id) } const makeMove = ({id, move}) => { - if (!gamesInProgress[id]) return { message: 'no game'}; + // console.log(id, move) + // console.log(gamesInProgress[id]) + if (!gamesInProgress[id]) storeGame({id}); gamesInProgress[id] = gamesInProgress[id].makeMove(move) if (gamesInProgress[id].success === false) return { message: 'illegal move' }; return getDataForUI(id) @@ -26,6 +29,12 @@ const getDataForUI = (id) => { }; } +const dropGame = (id) => { + return { message: + `${delete gamesInProgress[id]}` + } +} + const getAllGames = () => { return gamesInProgress; } @@ -34,5 +43,6 @@ module.exports = { makeMove, getAllGames, getDataForUI, - initGame + initGame, + dropGame } diff --git a/packages/server/socket.js b/packages/server/socket.js index 83d9a4b..7d2c090 100644 --- a/packages/server/socket.js +++ b/packages/server/socket.js @@ -22,8 +22,8 @@ io.on('connection', async socket=> { // ! temp await gameServices.initGame({id: data.game.id}) // ! end-temp - const gameData = await gameServices.getDataForUI(data.game.id); - io.of(room).to(game).emit('game_connected', gameData) + const { board, ...meta } = await gameServices.getDataForUI(data.game.id); + io.of(room).to(game).emit('game_connected', { board, meta }); }); }); socket.on('make_move', async data => { @@ -31,15 +31,14 @@ io.on('connection', async socket=> { const gameNsp = `game-${data.game.id}`; try { - const result = await gameServices.makeMove({ id: 1, move }); - console.log(result) - let socketAction = 'update_board'; - if (result.message) socketAction = 'error'; + const { board, message, ...meta } = await gameServices.makeMove({ id: 1, move }); + const socketAction = message ? 'error' : 'update_board'; socket.join(gameNsp, () => { - io.of(room).to(gameNsp).emit(socketAction, result) + io.of(room).to(gameNsp).emit(socketAction, { board, meta, message }) }); } catch (e) { + console.log(e) socket.join(gameNsp, () => { io.of(room).to(gameNsp).emit('error', e) }); diff --git a/packages/server/test/gameServices.spec.js b/packages/server/test/gameServices.spec.js index bd83e41..523ee8a 100644 --- a/packages/server/test/gameServices.spec.js +++ b/packages/server/test/gameServices.spec.js @@ -3,6 +3,8 @@ const should = chai.should(); const gameServices = require('../services/gameServices'); describe('game services', () => { + afterEach(() => gameServices.dropGame(1)) + it('init game returns game board', done => { gameServices.initGame({ id: 1, handicap: 4 }) .board.should.eql(fourHandicapBoard)