diff --git a/packages/play-node-go/src/components/GameUI/Point/Point.js b/packages/play-node-go/src/components/GameUI/Point/Point.js index 71e3899..7b2aa0e 100644 --- a/packages/play-node-go/src/components/GameUI/Point/Point.js +++ b/packages/play-node-go/src/components/GameUI/Point/Point.js @@ -40,6 +40,14 @@ const Point = (props) => { return ""; }; const clickHandle = (e) => { + if (meta?.turn === 0 && !meta?.winner) { + const action = { + type: "SOCKET", + message: "TOGGLE_TERRITORY", + body: { user, point: `${posX}-${posY}`, game, room: game.room }, + }; + return dispatch(action); + } const action = { type: "SOCKET", message: "MAKE_MOVE", diff --git a/packages/play-node-go/src/reducers/socket/reducer.socket.js b/packages/play-node-go/src/reducers/socket/reducer.socket.js index 4e1f0a1..ad5ca6f 100644 --- a/packages/play-node-go/src/reducers/socket/reducer.socket.js +++ b/packages/play-node-go/src/reducers/socket/reducer.socket.js @@ -42,6 +42,10 @@ export const socketReducer = (state, action) => { return pass(state, action); } + case "TOGGLE_TERRITORY": { + return toggleTerritory(state, action); + } + default: return state; } @@ -82,3 +86,9 @@ function pass(state, action) { socket.emit("pass", { ...action.body }); return state; } + +function toggleTerritory(state, action) { + const socket = state.socket; + socket.emit("toggle_territory", { ...action.body }); + return state; +} diff --git a/packages/server/services/gameServices.js b/packages/server/services/gameServices.js index 5a915a8..ea48263 100644 --- a/packages/server/services/gameServices.js +++ b/packages/server/services/gameServices.js @@ -100,6 +100,11 @@ const GameService = (moveQueries) => { return this.getDataForUI(id); } }, + + toggleTerritory({ id, point }) { + gamesInProgress[id] = gamesInProgress[id].toggleTerritory(point); + return this.getDataForUI(id); + }, }; }; diff --git a/packages/server/socket.js b/packages/server/socket.js index 2cfaedd..45d2896 100644 --- a/packages/server/socket.js +++ b/packages/server/socket.js @@ -69,6 +69,7 @@ io.on("connection", async (socket) => { console.log(e); } }); + // PASS socket.on("pass", async ({ game, player }) => { const { id, room } = game; @@ -92,6 +93,23 @@ io.on("connection", async (socket) => { console.log(e); } }); + + // TOGGLE TERRITORY + socket.on("toggle_territory", async ({ user, point, board, game }) => { + const { id, room } = game; + const gameNsp = `game${id}`; + try { + const { board, ...meta } = await gameServices.toggleTerritory({ + id, + point, + }); + socket.join(gameNsp, () => { + io.of(room).to(gameNsp).emit("update_board", { board, meta }); + }); + } catch (e) { + console.log(e); + } + }); }); }); });