diff --git a/apps/server/src/network/SocketManager.ts b/apps/server/src/network/SocketManager.ts index 6ab7ad5..71bdb3c 100644 --- a/apps/server/src/network/SocketManager.ts +++ b/apps/server/src/network/SocketManager.ts @@ -1,9 +1,7 @@ -import { Server, Socket } from "socket.io"; +import { Server } from "socket.io"; import { GameManager } from "@server/domains/game/GameManager"; import { RoomManager } from "@server/domains/room/RoomManager"; -import { protocol } from "@repo/shared"; -import { registerRoomHandlers, handleRoomDisconnect } from "./handlers/RoomHandler"; -import { registerGameHandlers, handleGameDisconnect } from "./handlers/GameHandler"; +import { registerConnectionHandlers } from "./handlers/registerConnectionHandlers"; export class SocketManager { private io: Server; @@ -17,22 +15,10 @@ } public initialize() { - this.io.on(protocol.SocketEvents.CONNECT, (socket: Socket) => { - console.log(`✅ User connected: ${socket.id}`); - - registerRoomHandlers(this.io, socket, this.roomManager); - registerGameHandlers(this.io, socket, this.gameManager, this.roomManager); - - socket.on(protocol.SocketEvents.DISCONNECT, () => { - console.log(`❌ User disconnected: ${socket.id}`); - - // 順番を厳守して実行 - // 1. まずゲーム世界から消す(データ参照ができなくなる前に実行) - handleGameDisconnect(this.io, this.gameManager, socket.id); - - // 2. 次にルームの枠組みから消す(オーナー移譲などのロジックを最後に実行) - handleRoomDisconnect(this.io, socket, this.roomManager); - }); + registerConnectionHandlers({ + io: this.io, + gameManager: this.gameManager, + roomManager: this.roomManager, }); } } \ No newline at end of file diff --git a/apps/server/src/network/handlers/registerConnectionHandlers.ts b/apps/server/src/network/handlers/registerConnectionHandlers.ts new file mode 100644 index 0000000..e75f3c6 --- /dev/null +++ b/apps/server/src/network/handlers/registerConnectionHandlers.ts @@ -0,0 +1,41 @@ +import { Server, Socket } from "socket.io"; +import { GameManager } from "@server/domains/game/GameManager"; +import { RoomManager } from "@server/domains/room/RoomManager"; +import { protocol } from "@repo/shared"; +import { registerRoomHandlers, handleRoomDisconnect } from "./RoomHandler"; +import { registerGameHandlers, handleGameDisconnect } from "./GameHandler"; +import { logEvent } from "@server/logging/logEvent"; + +type RegisterConnectionHandlersParams = { + io: Server; + gameManager: GameManager; + roomManager: RoomManager; +}; + +export const registerConnectionHandlers = ({ + io, + gameManager, + roomManager, +}: RegisterConnectionHandlersParams) => { + io.on(protocol.SocketEvents.CONNECT, (socket: Socket) => { + logEvent("Network", { + event: "CONNECT", + result: "connected", + socketId: socket.id, + }); + + registerRoomHandlers(io, socket, roomManager); + registerGameHandlers(io, socket, gameManager, roomManager); + + socket.on(protocol.SocketEvents.DISCONNECT, () => { + logEvent("Network", { + event: "DISCONNECT", + result: "disconnected", + socketId: socket.id, + }); + + handleGameDisconnect(io, gameManager, socket.id); + handleRoomDisconnect(io, socket, roomManager); + }); + }); +};