diff --git a/apps/server/src/application/coordinators/disconnectCoordinator.ts b/apps/server/src/application/coordinators/disconnectCoordinator.ts index c81b8cf..8075b48 100644 --- a/apps/server/src/application/coordinators/disconnectCoordinator.ts +++ b/apps/server/src/application/coordinators/disconnectCoordinator.ts @@ -2,30 +2,46 @@ * disconnectCoordinator * DISCONNECTイベントの調停を行い,ゲーム離脱処理とルーム離脱処理を順序実行する */ -import type { DisconnectPlayerPort } from "@server/domains/game/application/ports/gameUseCasePorts"; +import { + type DisconnectPlayerPort, + type GameOutputPort, +} from "@server/domains/game/application/ports/gameUseCasePorts"; +import { disconnectUseCase } from "@server/domains/game/application/useCases/disconnectUseCase"; import type { DisconnectRoomPort, FindRoomByPlayerPort, + RoomOutputPort, } from "@server/domains/room/application/ports/roomUseCasePorts"; -import { handleGameDisconnect } from "@server/network/handlers/GameHandler"; -import { handleRoomDisconnect } from "@server/network/handlers/RoomHandler"; +import { roomDisconnectUseCase } from "@server/domains/room/application/useCases/roomDisconnectUseCase"; type DisconnectCoordinatorParams = { - io: Parameters[0]; socketId: string; gameManager: DisconnectPlayerPort; roomManager: DisconnectRoomPort & FindRoomByPlayerPort; + gameOutput: Pick; + roomOutput: Pick; }; /** 切断時にゲーム処理とルーム処理を調停し,一貫した離脱処理を実行する */ export const disconnectCoordinator = ({ - io, socketId, gameManager, roomManager, + gameOutput, + roomOutput, }: DisconnectCoordinatorParams) => { const roomId = roomManager.getRoomByPlayerId(socketId)?.roomId; - handleGameDisconnect(io, gameManager, roomId, socketId); - handleRoomDisconnect(io, socketId, roomManager); + disconnectUseCase({ + gameManager, + roomId, + playerId: socketId, + output: gameOutput, + }); + + roomDisconnectUseCase({ + roomManager, + socketId, + output: roomOutput, + }); }; diff --git a/apps/server/src/network/handlers/GameHandler.ts b/apps/server/src/network/handlers/GameHandler.ts index 3cefc15..c2be16e 100644 --- a/apps/server/src/network/handlers/GameHandler.ts +++ b/apps/server/src/network/handlers/GameHandler.ts @@ -4,5 +4,3 @@ */ /** ゲームイベント受信ハンドラ登録関数を再公開する */ export { registerGameHandlers } from "./game/registerGameHandlers"; -/** ゲーム切断処理ハンドラを再公開する */ -export { handleGameDisconnect } from "./game/handleGameDisconnect"; diff --git a/apps/server/src/network/handlers/RoomHandler.ts b/apps/server/src/network/handlers/RoomHandler.ts index 4ff4894..9710aaa 100644 --- a/apps/server/src/network/handlers/RoomHandler.ts +++ b/apps/server/src/network/handlers/RoomHandler.ts @@ -4,5 +4,3 @@ */ /** ルームイベント受信ハンドラ登録関数を再公開する */ export { registerRoomHandlers } from "./room/registerRoomHandlers"; -/** ルーム切断処理ハンドラを再公開する */ -export { handleRoomDisconnect } from "./room/handleRoomDisconnect"; diff --git a/apps/server/src/network/handlers/game/handleGameDisconnect.ts b/apps/server/src/network/handlers/game/handleGameDisconnect.ts deleted file mode 100644 index 9cb11a0..0000000 --- a/apps/server/src/network/handlers/game/handleGameDisconnect.ts +++ /dev/null @@ -1,25 +0,0 @@ -/** - * handleGameDisconnect - * ゲーム切断ユースケースを呼び出してプレイヤー離脱を配信する - */ -import { Server } from "socket.io"; -import type { DisconnectPlayerPort } from "@server/domains/game/application/ports/gameUseCasePorts"; -import { disconnectUseCase } from "@server/domains/game/application/useCases/disconnectUseCase"; -import { createGameDisconnectOutputAdapter } from "./createGameOutputAdapter"; - -/** 切断したプレイヤーをゲーム管理から除外し通知する */ -export const handleGameDisconnect = ( - io: Server, - gameManager: DisconnectPlayerPort, - roomId: string | undefined, - playerId: string -) => { - const gameDisconnectOutputAdapter = createGameDisconnectOutputAdapter(io); - - disconnectUseCase({ - gameManager, - roomId, - playerId, - output: gameDisconnectOutputAdapter, - }); -}; diff --git a/apps/server/src/network/handlers/registerConnectionHandlers.ts b/apps/server/src/network/handlers/registerConnectionHandlers.ts index aa00256..9731a4c 100644 --- a/apps/server/src/network/handlers/registerConnectionHandlers.ts +++ b/apps/server/src/network/handlers/registerConnectionHandlers.ts @@ -21,24 +21,27 @@ import { registerGameHandlers } from "./GameHandler"; import { logEvent } from "@server/logging/logEvent"; import { disconnectCoordinator } from "@server/application/coordinators/disconnectCoordinator"; +import { createGameDisconnectOutputAdapter } from "./game/createGameOutputAdapter"; +import { createRoomDisconnectOutputAdapter } from "./room/createRoomOutputAdapter"; type ConnectionGamePort = & StartGamePort & ReadyForGamePort - & MovePlayerPort - & DisconnectPlayerPort; + & MovePlayerPort; + +type DisconnectGamePort = DisconnectPlayerPort; type ConnectionRoomPort = & JoinRoomPort & StartGameRoomPort - & ReadyForGameRoomPort - & DisconnectRoomPort - & FindRoomByPlayerPort; + & ReadyForGameRoomPort; + +type DisconnectRoomHandlerPort = DisconnectRoomPort & FindRoomByPlayerPort; type RegisterConnectionHandlersParams = { io: Server; - gameManager: ConnectionGamePort; - roomManager: ConnectionRoomPort; + gameManager: ConnectionGamePort & DisconnectGamePort; + roomManager: ConnectionRoomPort & DisconnectRoomHandlerPort; }; /** ソケット接続と切断イベントに対する共通ハンドラを登録する */ @@ -47,6 +50,13 @@ gameManager, roomManager, }: RegisterConnectionHandlersParams) => { + const gameDisconnectOutputAdapter = createGameDisconnectOutputAdapter(io); + const roomDisconnectOutputAdapter = createRoomDisconnectOutputAdapter(io); + const connectionGameManager: ConnectionGamePort = gameManager; + const disconnectGameManager: DisconnectGamePort = gameManager; + const connectionRoomManager: ConnectionRoomPort = roomManager; + const disconnectRoomManager: DisconnectRoomHandlerPort = roomManager; + io.on(protocol.SocketEvents.CONNECT, (socket: Socket) => { // 接続ログを記録してドメイン別ハンドラを登録する logEvent("Network", { @@ -55,8 +65,8 @@ socketId: socket.id, }); - registerRoomHandlers(io, socket, roomManager); - registerGameHandlers(io, socket, gameManager, roomManager); + registerRoomHandlers(io, socket, connectionRoomManager); + registerGameHandlers(io, socket, connectionGameManager, connectionRoomManager); socket.on(protocol.SocketEvents.DISCONNECT, () => { // 切断ログ記録後にドメイン別の後処理を実行する @@ -67,10 +77,11 @@ }); disconnectCoordinator({ - io, socketId: socket.id, - gameManager, - roomManager, + gameManager: disconnectGameManager, + roomManager: disconnectRoomManager, + gameOutput: gameDisconnectOutputAdapter, + roomOutput: roomDisconnectOutputAdapter, }); }); }); diff --git a/apps/server/src/network/handlers/room/handleRoomDisconnect.ts b/apps/server/src/network/handlers/room/handleRoomDisconnect.ts deleted file mode 100644 index 213741b..0000000 --- a/apps/server/src/network/handlers/room/handleRoomDisconnect.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** - * handleRoomDisconnect - * ルーム切断ユースケースを呼び出してルーム状態更新を配信する - */ -import { Server } from "socket.io"; -import type { DisconnectRoomPort } from "@server/domains/room/application/ports/roomUseCasePorts"; -import { roomDisconnectUseCase } from "@server/domains/room/application/useCases/roomDisconnectUseCase"; -import { createRoomDisconnectOutputAdapter } from "./createRoomOutputAdapter"; - -/** 切断ソケットのルーム離脱処理を実行して更新通知する */ -export const handleRoomDisconnect = ( - io: Server, - socketId: string, - roomManager: DisconnectRoomPort -) => { - const roomDisconnectOutputAdapter = createRoomDisconnectOutputAdapter(io); - - roomDisconnectUseCase({ - roomManager, - socketId, - output: roomDisconnectOutputAdapter, - }); -};