diff --git a/apps/server/src/domains/game/application/useCases/executeDisconnectUseCase.ts b/apps/server/src/domains/game/application/useCases/executeDisconnectUseCase.ts new file mode 100644 index 0000000..20f5f30 --- /dev/null +++ b/apps/server/src/domains/game/application/useCases/executeDisconnectUseCase.ts @@ -0,0 +1,20 @@ +import { protocol } from "@repo/shared"; +import { GameManager } from "@server/domains/game/GameManager"; + +type EmitToAll = (event: string, payload?: unknown) => void; + +type ExecuteDisconnectUseCaseParams = { + gameManager: GameManager; + playerId: string; + emitToAll: EmitToAll; +}; + +export const executeDisconnectUseCase = ({ + gameManager, + playerId, + emitToAll, +}: ExecuteDisconnectUseCaseParams) => { + gameManager.removePlayer(playerId); + emitToAll(protocol.SocketEvents.REMOVE_PLAYER, playerId); + console.log("[GameHandler] player removed", { playerId }); +}; diff --git a/apps/server/src/domains/game/application/useCases/executeMovePlayerUseCase.ts b/apps/server/src/domains/game/application/useCases/executeMovePlayerUseCase.ts new file mode 100644 index 0000000..cb957a3 --- /dev/null +++ b/apps/server/src/domains/game/application/useCases/executeMovePlayerUseCase.ts @@ -0,0 +1,16 @@ +import { GameManager } from "@server/domains/game/GameManager"; +import type { playerTypes } from "@repo/shared"; + +type ExecuteMovePlayerUseCaseParams = { + gameManager: GameManager; + playerId: string; + move: playerTypes.MovePayload; +}; + +export const executeMovePlayerUseCase = ({ + gameManager, + playerId, + move, +}: ExecuteMovePlayerUseCaseParams) => { + gameManager.movePlayer(playerId, move.x, move.y); +}; diff --git a/apps/server/src/domains/game/application/useCases/executePingUseCase.ts b/apps/server/src/domains/game/application/useCases/executePingUseCase.ts new file mode 100644 index 0000000..59b1e44 --- /dev/null +++ b/apps/server/src/domains/game/application/useCases/executePingUseCase.ts @@ -0,0 +1,18 @@ +import { protocol } from "@repo/shared"; + +type EmitToSocket = (event: string, payload?: unknown) => void; + +type ExecutePingUseCaseParams = { + clientTime: number; + emitToSocket: EmitToSocket; +}; + +export const executePingUseCase = ({ + clientTime, + emitToSocket, +}: ExecutePingUseCaseParams) => { + emitToSocket(protocol.SocketEvents.PONG, { + clientTime, + serverTime: Date.now(), + }); +}; diff --git a/apps/server/src/domains/game/handlers/onDisconnect.ts b/apps/server/src/domains/game/handlers/onDisconnect.ts index 4cc4b5f..94ee5f0 100644 --- a/apps/server/src/domains/game/handlers/onDisconnect.ts +++ b/apps/server/src/domains/game/handlers/onDisconnect.ts @@ -1,13 +1,22 @@ import { Server } from "socket.io"; import { GameManager } from "@server/domains/game/GameManager"; -import { protocol } from "@repo/shared"; +import { executeDisconnectUseCase } from "@server/domains/game/application/useCases/executeDisconnectUseCase"; export const onDisconnect = ( io: Server, gameManager: GameManager, playerId: string ) => { - gameManager.removePlayer(playerId); - io.emit(protocol.SocketEvents.REMOVE_PLAYER, playerId); - console.log("[GameHandler] player removed", { playerId }); + executeDisconnectUseCase({ + gameManager, + playerId, + emitToAll: (event, payload) => { + if (payload === undefined) { + io.emit(event); + return; + } + + io.emit(event, payload); + }, + }); }; diff --git a/apps/server/src/domains/game/handlers/onMove.ts b/apps/server/src/domains/game/handlers/onMove.ts index 7288ce3..2b5ceb5 100644 --- a/apps/server/src/domains/game/handlers/onMove.ts +++ b/apps/server/src/domains/game/handlers/onMove.ts @@ -1,10 +1,15 @@ import { GameManager } from "@server/domains/game/GameManager"; import type { playerTypes } from "@repo/shared"; +import { executeMovePlayerUseCase } from "@server/domains/game/application/useCases/executeMovePlayerUseCase"; export const onMove = ( gameManager: GameManager, playerId: string, data: playerTypes.MovePayload ) => { - gameManager.movePlayer(playerId, data.x, data.y); + executeMovePlayerUseCase({ + gameManager, + playerId, + move: data, + }); }; diff --git a/apps/server/src/domains/game/handlers/onPing.ts b/apps/server/src/domains/game/handlers/onPing.ts index 2045d39..a4ddf1c 100644 --- a/apps/server/src/domains/game/handlers/onPing.ts +++ b/apps/server/src/domains/game/handlers/onPing.ts @@ -1,6 +1,16 @@ import { Socket } from "socket.io"; -import { protocol } from "@repo/shared"; +import { executePingUseCase } from "@server/domains/game/application/useCases/executePingUseCase"; export const onPing = (socket: Socket, clientTime: number) => { - socket.emit(protocol.SocketEvents.PONG, { clientTime, serverTime: Date.now() }); + executePingUseCase({ + clientTime, + emitToSocket: (event, payload) => { + if (payload === undefined) { + socket.emit(event); + return; + } + + socket.emit(event, payload); + }, + }); };