diff --git a/apps/server/src/domains/game/application/useCases/executeReadyForGameUseCase.ts b/apps/server/src/domains/game/application/useCases/executeReadyForGameUseCase.ts new file mode 100644 index 0000000..d1cb6ad --- /dev/null +++ b/apps/server/src/domains/game/application/useCases/executeReadyForGameUseCase.ts @@ -0,0 +1,43 @@ +import { protocol } from "@repo/shared"; +import { GameManager } from "@server/domains/game/GameManager"; + +type EmitToSocket = (event: string, payload?: unknown) => void; + +type ExecuteReadyForGameUseCaseParams = { + socketId: string; + roomId?: string; + gameManager: GameManager; + emitToSocket: EmitToSocket; +}; + +export const executeReadyForGameUseCase = ({ + socketId, + roomId, + gameManager, + emitToSocket, +}: ExecuteReadyForGameUseCaseParams) => { + const allPlayers = gameManager.getAllPlayers(); + emitToSocket(protocol.SocketEvents.CURRENT_PLAYERS, allPlayers); + + console.log("[GameHandler] READY_FOR_GAME received", { + socketId, + totalPlayers: allPlayers.length, + }); + + if (!roomId) { + console.log("[GameHandler] READY_FOR_GAME missing roomId", { socketId }); + return; + } + + const startTime = gameManager.getRoomStartTime(roomId); + if (!startTime) { + return; + } + + emitToSocket(protocol.SocketEvents.GAME_START, { startTime }); + console.log("[GameHandler] GAME_START sent to ready client", { + socketId, + roomId, + startTime, + }); +}; diff --git a/apps/server/src/domains/game/handlers/onReadyForGame.ts b/apps/server/src/domains/game/handlers/onReadyForGame.ts index f7c845b..c708f1b 100644 --- a/apps/server/src/domains/game/handlers/onReadyForGame.ts +++ b/apps/server/src/domains/game/handlers/onReadyForGame.ts @@ -1,30 +1,24 @@ import { Socket } from "socket.io"; import { GameManager } from "@server/domains/game/GameManager"; -import { protocol } from "@repo/shared"; +import { executeReadyForGameUseCase } from "@server/domains/game/application/useCases/executeReadyForGameUseCase"; export const onReadyForGame = ( socket: Socket, gameManager: GameManager ) => { - const allPlayers = gameManager.getAllPlayers(); - socket.emit(protocol.SocketEvents.CURRENT_PLAYERS, allPlayers); - console.log("[GameHandler] READY_FOR_GAME received", { - socketId: socket.id, - totalPlayers: allPlayers.length, - }); - const roomId = Array.from(socket.rooms).find((room) => room !== socket.id); - if (roomId) { - const startTime = gameManager.getRoomStartTime(roomId); - if (startTime) { - socket.emit(protocol.SocketEvents.GAME_START, { startTime }); - console.log("[GameHandler] GAME_START sent to ready client", { - socketId: socket.id, - roomId, - startTime, - }); - } - } else { - console.log("[GameHandler] READY_FOR_GAME missing roomId", { socketId: socket.id }); - } + + executeReadyForGameUseCase({ + socketId: socket.id, + roomId, + gameManager, + emitToSocket: (event, payload) => { + if (payload === undefined) { + socket.emit(event); + return; + } + + socket.emit(event, payload); + }, + }); };