From 470aed128d1d7c213135ca09c7496cda8d343750 Mon Sep 17 00:00:00 2001 From: Jonathan Loh Date: Sun, 21 Jan 2024 01:08:05 +0800 Subject: [PATCH] Store room FEN and leave rooms when back to home --- backend/src/server.ts | 17 ++++++++++++----- backend/src/utils/globals.ts | 1 + frontend/src/Landing.tsx | 3 ++- frontend/src/utils/socket.tsx | 4 ++++ 4 files changed, 19 insertions(+), 6 deletions(-) create mode 100644 backend/src/utils/globals.ts diff --git a/backend/src/server.ts b/backend/src/server.ts index 6934cce..f026d26 100644 --- a/backend/src/server.ts +++ b/backend/src/server.ts @@ -6,11 +6,15 @@ import { generateRoomCode } from "./utils/calc.js"; import dotenv from "dotenv"; import { Server } from "socket.io"; import { Chess } from "chess.js"; +import "./utils/globals.js"; dotenv.config(); +globalThis.roomFen = new Map(); + const ENVIRONMENT = process.env.ENV || "dev"; +const START_FEN = new Chess().fen(); const chess = new Chess(); let expressApp = express(); @@ -56,17 +60,20 @@ io.on("connection", (socket) => { return; } socket.join(roomId); + globalThis.roomFen.set(roomId, START_FEN); if (io.sockets.adapter.rooms.get(roomId).size === 2) - io.to(roomId).emit( - "start", - "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR", - socket.id - ); + io.to(roomId).emit("start", START_FEN, socket.id); callback("answer"); }); + socket.on("leave", () => { + socket.rooms.forEach((roomId) => { + if (roomId !== socket.id) socket.leave(roomId); + }); + }); + socket.on("move", (move, callback) => { console.log(socket.id, move); const allowed = Math.random() < 0.7; //TODO LLM diff --git a/backend/src/utils/globals.ts b/backend/src/utils/globals.ts new file mode 100644 index 0000000..834618c --- /dev/null +++ b/backend/src/utils/globals.ts @@ -0,0 +1 @@ +var roomFen: Map; diff --git a/frontend/src/Landing.tsx b/frontend/src/Landing.tsx index beab888..4a99f63 100644 --- a/frontend/src/Landing.tsx +++ b/frontend/src/Landing.tsx @@ -1,6 +1,6 @@ import { useCallback, useEffect, useRef, useState } from "react"; import { Button, Grid, Header, Icon, Input } from "semantic-ui-react"; -import { createRoom, joinRoom } from "./utils/socket"; +import { createRoom, joinRoom, resetRoom } from "./utils/socket"; export default function Landing({ confirmedRoomCodeState, @@ -48,6 +48,7 @@ export default function Landing({ onClick={() => { setConfirmedRoomCode(""); setRoomCode(""); + resetRoom(); }} > Back to Home diff --git a/frontend/src/utils/socket.tsx b/frontend/src/utils/socket.tsx index 1e73b40..84c67d6 100644 --- a/frontend/src/utils/socket.tsx +++ b/frontend/src/utils/socket.tsx @@ -18,6 +18,10 @@ export async function joinRoom(roomId: string) { return response as boolean; } +export function resetRoom() { + socket.emit("leave"); +} + export async function move(move: string) { return (await socket.emitWithAck("move", move)) as string; }