diff --git a/apps/server/src/domains/game/application/adapters/createGameEmitters.ts b/apps/server/src/domains/game/application/adapters/createGameEmitters.ts new file mode 100644 index 0000000..32439b9 --- /dev/null +++ b/apps/server/src/domains/game/application/adapters/createGameEmitters.ts @@ -0,0 +1,34 @@ +import { Server, Socket } from "socket.io"; + +type EmitPayload = unknown; + +const emitWithOptionalPayload = ( + emit: (event: string, payload?: EmitPayload) => void, + event: string, + payload?: EmitPayload +) => { + if (payload === undefined) { + emit(event); + return; + } + + emit(event, payload); +}; + +export const createEmitToRoom = (io: Server) => { + return (roomId: string, event: string, payload?: EmitPayload) => { + emitWithOptionalPayload((eventName, body) => io.to(roomId).emit(eventName, body), event, payload); + }; +}; + +export const createEmitToSocket = (socket: Socket) => { + return (event: string, payload?: EmitPayload) => { + emitWithOptionalPayload((eventName, body) => socket.emit(eventName, body), event, payload); + }; +}; + +export const createEmitToAll = (io: Server) => { + return (event: string, payload?: EmitPayload) => { + emitWithOptionalPayload((eventName, body) => io.emit(eventName, body), event, payload); + }; +}; diff --git a/apps/server/src/domains/game/handlers/onDisconnect.ts b/apps/server/src/domains/game/handlers/onDisconnect.ts index 5555397..0756c37 100644 --- a/apps/server/src/domains/game/handlers/onDisconnect.ts +++ b/apps/server/src/domains/game/handlers/onDisconnect.ts @@ -1,22 +1,18 @@ import { Server } from "socket.io"; import { GameManager } from "@server/domains/game/GameManager"; import { disconnectUseCase } from "@server/domains/game/application/useCases/disconnectUseCase"; +import { createEmitToAll } from "../application/adapters/createGameEmitters"; export const onDisconnect = ( io: Server, gameManager: GameManager, playerId: string ) => { + const emitToAll = createEmitToAll(io); + disconnectUseCase({ gameManager, playerId, - emitToAll: (event, payload) => { - if (payload === undefined) { - io.emit(event); - return; - } - - io.emit(event, payload); - }, + emitToAll, }); }; diff --git a/apps/server/src/domains/game/handlers/onPing.ts b/apps/server/src/domains/game/handlers/onPing.ts index 99c8f88..e50c659 100644 --- a/apps/server/src/domains/game/handlers/onPing.ts +++ b/apps/server/src/domains/game/handlers/onPing.ts @@ -1,16 +1,12 @@ import { Socket } from "socket.io"; import { pingUseCase } from "@server/domains/game/application/useCases/pingUseCase"; +import { createEmitToSocket } from "../application/adapters/createGameEmitters"; export const onPing = (socket: Socket, clientTime: number) => { + const emitToSocket = createEmitToSocket(socket); + pingUseCase({ clientTime, - emitToSocket: (event, payload) => { - if (payload === undefined) { - socket.emit(event); - return; - } - - socket.emit(event, payload); - }, + emitToSocket, }); }; diff --git a/apps/server/src/domains/game/handlers/onReadyForGame.ts b/apps/server/src/domains/game/handlers/onReadyForGame.ts index 6bece4f..5ab8152 100644 --- a/apps/server/src/domains/game/handlers/onReadyForGame.ts +++ b/apps/server/src/domains/game/handlers/onReadyForGame.ts @@ -1,24 +1,19 @@ import { Socket } from "socket.io"; import { GameManager } from "@server/domains/game/GameManager"; import { readyForGameUseCase } from "@server/domains/game/application/useCases/readyForGameUseCase"; +import { createEmitToSocket } from "../application/adapters/createGameEmitters"; export const onReadyForGame = ( socket: Socket, gameManager: GameManager ) => { const roomId = Array.from(socket.rooms).find((room) => room !== socket.id); + const emitToSocket = createEmitToSocket(socket); readyForGameUseCase({ socketId: socket.id, roomId, gameManager, - emitToSocket: (event, payload) => { - if (payload === undefined) { - socket.emit(event); - return; - } - - socket.emit(event, payload); - }, + emitToSocket, }); }; diff --git a/apps/server/src/domains/game/handlers/onStartGame.ts b/apps/server/src/domains/game/handlers/onStartGame.ts index 528caaa..a3b9a08 100644 --- a/apps/server/src/domains/game/handlers/onStartGame.ts +++ b/apps/server/src/domains/game/handlers/onStartGame.ts @@ -2,6 +2,7 @@ import { GameManager } from "@server/domains/game/GameManager"; import { RoomManager } from "@server/domains/room/RoomManager"; import { startGameUseCase } from "@server/domains/game/application/useCases/startGameUseCase"; +import { createEmitToRoom } from "../application/adapters/createGameEmitters"; export const onStartGame = ( io: Server, @@ -9,17 +10,12 @@ roomManager: RoomManager, ownerId: string ) => { + const emitToRoom = createEmitToRoom(io); + startGameUseCase({ ownerId, gameManager, roomManager, - emitToRoom: (roomId, event, payload) => { - if (payload === undefined) { - io.to(roomId).emit(event); - return; - } - - io.to(roomId).emit(event, payload); - }, + emitToRoom, }); };