diff --git a/packages/server/src/ws/handler.ts b/packages/server/src/ws/handler.ts index aa8387f..dfb0acb 100644 --- a/packages/server/src/ws/handler.ts +++ b/packages/server/src/ws/handler.ts @@ -378,6 +378,41 @@ export function registerWebSocketRoutes() { break } + case "submit_actual_results": { + if (!sessionId) { + sendError(ws, "Not joined") + return + } + const room = roomManager.getRoom(roomCode) + if (room?.currentAct !== "scoring" && room?.currentAct !== "ended") { + sendError(ws, "Results can only be entered during Scoring or Ended") + return + } + if (!roomManager.isHost(roomCode, sessionId)) { + sendError(ws, "Only the host can enter actual results") + return + } + const gm = roomManager.getGameManager(roomCode) + if (!gm) { + sendError(ws, "Room not found") + return + } + const allPicks = [msg.winner, msg.second, msg.third, msg.last] + for (const code of allPicks) { + if (!gm.isValidCountry(code)) { + sendError(ws, `Invalid country: ${code}`) + return + } + } + if (new Set(allPicks).size !== 4) { + sendError(ws, "All 4 picks must be different countries") + return + } + gm.setActualResults(msg.winner, msg.second, msg.third, msg.last) + broadcastGameStateToAll(roomCode) + break + } + case "tap_bingo_square": { if (!sessionId) { sendError(ws, "Not joined")