diff --git a/app/components/socket-provider.tsx b/app/components/socket-provider.tsx index 5a02f9a..a14cdf6 100644 --- a/app/components/socket-provider.tsx +++ b/app/components/socket-provider.tsx @@ -34,15 +34,12 @@ export function SocketProvider({ children }: React.PropsWithChildren) { } }); - socket.on("sessionAlive", (sessionId) => { + socket.on("session", (sessionId) => { socket.auth = { sessionId }; localStorage.setItem("sessionId", sessionId); - setSessionState("alive"); }); - socket.on("sessionDead", () => { - setSessionState("dead"); - }); + socket.on("sessionState", setSessionState); }, []); return ( diff --git a/app/server.ts b/app/server.ts index 7499314..8fbc02f 100644 --- a/app/server.ts +++ b/app/server.ts @@ -33,8 +33,15 @@ async function main() { }); io.on("connection", async (socket) => { + if (field.isComplete) { + field = await Field.create(field.size + 10); + await redis.resetSessions(); + io.emit("sessionState", "alive"); + } + await redis.setSession(socket.data.sessionId, "alive"); - socket.emit("sessionAlive", socket.data.sessionId); + socket.emit("session", socket.data.sessionId); + socket.emit("sessionState", "alive"); clientsCount++; io.emit("clientsCount", clientsCount); @@ -44,10 +51,11 @@ async function main() { socket.on("expose", async (index) => { if (field.exposeCell(index) === "dead") { await redis.setSession(socket.data.sessionId, "dead"); - socket.emit("sessionDead"); + socket.emit("sessionState", "dead"); } else if (field.isComplete) { field = await Field.create(field.size + 10); await redis.resetSessions(); + io.emit("sessionState", "alive"); } io.emit("exposedPercent", field.exposedPercent); io.emit("update", field.plots); diff --git a/app/types/index.ts b/app/types/index.ts index 310c904..cab787c 100644 --- a/app/types/index.ts +++ b/app/types/index.ts @@ -13,8 +13,8 @@ export type ServerToClientEvents = { update(state: Field["plots"]): void; clientsCount(count: number): void; exposedPercent(count: number): void; - sessionAlive(sessionId: string): void; - sessionDead(): void; + session(sessionId: string): void; + sessionState(state: SessionState): void; }; type InterServerEvents = {};