diff --git a/apps/server/src/domains/game/GameHandler.ts b/apps/server/src/domains/game/GameHandler.ts deleted file mode 100644 index d1409db..0000000 --- a/apps/server/src/domains/game/GameHandler.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { Server, Socket } from "socket.io"; -import { GameManager } from "./GameManager"; -import { RoomManager } from "@server/domains/room/RoomManager"; -import { protocol } from "@repo/shared"; -import type { playerTypes } from "@repo/shared"; -import { onPing } from "./handlers/onPing"; -import { onStartGame } from "./handlers/onStartGame"; -import { onReadyForGame } from "./handlers/onReadyForGame"; -import { onMove } from "./handlers/onMove"; -import { onDisconnect } from "./handlers/onDisconnect"; - -export const registerGameHandlers = (io: Server, socket: Socket, gameManager: GameManager, roomManager: RoomManager) => { - - // クライアントから送られてきた時刻をそのまま返しつつ、サーバーの現在時刻も添える - socket.on(protocol.SocketEvents.PING, (clientTime: number) => { - onPing(socket, clientTime); - }); - - // ゲーム開始要求処理 - socket.on(protocol.SocketEvents.START_GAME, () => { - onStartGame(io, gameManager, roomManager, socket.id); - }); - - // 画面準備完了通知受信時初期データ返却 - socket.on(protocol.SocketEvents.READY_FOR_GAME, () => { - onReadyForGame(socket, gameManager); - }); - - // ゲームプレイ中イベント群 - socket.on(protocol.SocketEvents.MOVE, (data: playerTypes.MovePayload) => { - onMove(gameManager, socket.id, data); - }); - -}; - -/** - * 切断時のゲームクリーンアップ処理 - */ -export const handleGameDisconnect = (io: Server, gameManager: GameManager, playerId: string) => { - onDisconnect(io, gameManager, playerId); -}; \ No newline at end of file diff --git a/apps/server/src/domains/room/RoomHandler.ts b/apps/server/src/domains/room/RoomHandler.ts deleted file mode 100644 index 8e70325..0000000 --- a/apps/server/src/domains/room/RoomHandler.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { Server, Socket } from "socket.io"; -import { RoomManager } from "./RoomManager"; -import { protocol } from "@repo/shared"; -import type { roomTypes } from "@repo/shared"; -import { joinRoomUseCase } from "./application/useCases/joinRoomUseCase"; -import { roomDisconnectUseCase } from "./application/useCases/roomDisconnectUseCase"; -import { createEmitToRoom } from "@server/network/adapters/socketEmitters"; - -const getEmitToRoom = (io: Server) => createEmitToRoom(io); - -export const registerRoomHandlers = (io: Server, socket: Socket, roomManager: RoomManager) => { - const emitToRoom = getEmitToRoom(io); - - socket.on(protocol.SocketEvents.JOIN_ROOM, (data: roomTypes.JoinRoomPayload) => { - const { roomId } = data; - - socket.join(roomId); - - joinRoomUseCase({ - roomManager, - socketId: socket.id, - data, - emitToRoom, - }); - }); - -}; - -/** - * 切断時のルームクリーンアップ処理 - */ -export const handleRoomDisconnect = (io: Server, socket: Socket, roomManager: RoomManager) => { - const emitToRoom = getEmitToRoom(io); - - roomDisconnectUseCase({ - roomManager, - socketId: socket.id, - emitToRoom, - }); -}; \ No newline at end of file diff --git a/apps/server/src/network/SocketManager.ts b/apps/server/src/network/SocketManager.ts index 01bff7d..56ce860 100644 --- a/apps/server/src/network/SocketManager.ts +++ b/apps/server/src/network/SocketManager.ts @@ -2,8 +2,8 @@ import { GameManager } from "@server/domains/game/GameManager"; import { RoomManager } from "@server/domains/room/RoomManager"; import { protocol } from "@repo/shared"; -import { registerRoomHandlers, handleRoomDisconnect } from "@server/domains/room/RoomHandler"; -import { registerGameHandlers, handleGameDisconnect } from "@server/domains/game/GameHandler"; +import { registerRoomHandlers, handleRoomDisconnect } from "@server/network/handlers/RoomHandler"; +import { registerGameHandlers, handleGameDisconnect } from "@server/network/handlers/GameHandler"; export class SocketManager { private io: Server; diff --git a/apps/server/src/network/handlers/game/handleGameDisconnect.ts b/apps/server/src/network/handlers/game/handleGameDisconnect.ts index 0e92b62..dc9e33d 100644 --- a/apps/server/src/network/handlers/game/handleGameDisconnect.ts +++ b/apps/server/src/network/handlers/game/handleGameDisconnect.ts @@ -1,11 +1,16 @@ import { Server } from "socket.io"; import { GameManager } from "@server/domains/game/GameManager"; -import { handleGameDisconnect as handleDomainGameDisconnect } from "@server/domains/game/GameHandler"; +import { disconnectUseCase } from "@server/domains/game/application/useCases/disconnectUseCase"; +import { createEmitToAll } from "@server/network/adapters/socketEmitters"; export const handleGameDisconnect = ( io: Server, gameManager: GameManager, playerId: string ) => { - handleDomainGameDisconnect(io, gameManager, playerId); + disconnectUseCase({ + gameManager, + playerId, + emitToAll: createEmitToAll(io), + }); }; diff --git a/apps/server/src/network/handlers/game/registerGameHandlers.ts b/apps/server/src/network/handlers/game/registerGameHandlers.ts index bc7f700..61a8f65 100644 --- a/apps/server/src/network/handlers/game/registerGameHandlers.ts +++ b/apps/server/src/network/handlers/game/registerGameHandlers.ts @@ -1,7 +1,13 @@ import { Server, Socket } from "socket.io"; import { GameManager } from "@server/domains/game/GameManager"; import { RoomManager } from "@server/domains/room/RoomManager"; -import { registerGameHandlers as registerDomainGameHandlers } from "@server/domains/game/GameHandler"; +import { protocol } from "@repo/shared"; +import type { playerTypes } from "@repo/shared"; +import { pingUseCase } from "@server/domains/game/application/useCases/pingUseCase"; +import { startGameUseCase } from "@server/domains/game/application/useCases/startGameUseCase"; +import { readyForGameUseCase } from "@server/domains/game/application/useCases/readyForGameUseCase"; +import { movePlayerUseCase } from "@server/domains/game/application/useCases/movePlayerUseCase"; +import { createCommonHandlerContext } from "@server/network/handlers/CommonHandler"; export const registerGameHandlers = ( io: Server, @@ -9,5 +15,40 @@ gameManager: GameManager, roomManager: RoomManager ) => { - registerDomainGameHandlers(io, socket, gameManager, roomManager); + const common = createCommonHandlerContext(io, socket); + + socket.on(protocol.SocketEvents.PING, (clientTime: number) => { + pingUseCase({ + clientTime, + emitToSocket: common.emitToSocket, + }); + }); + + socket.on(protocol.SocketEvents.START_GAME, () => { + startGameUseCase({ + ownerId: socket.id, + gameManager, + roomManager, + emitToRoom: common.emitToRoom, + }); + }); + + socket.on(protocol.SocketEvents.READY_FOR_GAME, () => { + const roomId = Array.from(socket.rooms).find((room) => room !== socket.id); + + readyForGameUseCase({ + socketId: socket.id, + roomId, + gameManager, + emitToSocket: common.emitToSocket, + }); + }); + + socket.on(protocol.SocketEvents.MOVE, (data: playerTypes.MovePayload) => { + movePlayerUseCase({ + gameManager, + playerId: socket.id, + move: data, + }); + }); }; diff --git a/apps/server/src/network/handlers/room/handleRoomDisconnect.ts b/apps/server/src/network/handlers/room/handleRoomDisconnect.ts index 11b3c7d..03046af 100644 --- a/apps/server/src/network/handlers/room/handleRoomDisconnect.ts +++ b/apps/server/src/network/handlers/room/handleRoomDisconnect.ts @@ -1,11 +1,16 @@ import { Server, Socket } from "socket.io"; import { RoomManager } from "@server/domains/room/RoomManager"; -import { handleRoomDisconnect as handleDomainRoomDisconnect } from "@server/domains/room/RoomHandler"; +import { roomDisconnectUseCase } from "@server/domains/room/application/useCases/roomDisconnectUseCase"; +import { createEmitToRoom } from "@server/network/adapters/socketEmitters"; export const handleRoomDisconnect = ( io: Server, socket: Socket, roomManager: RoomManager ) => { - handleDomainRoomDisconnect(io, socket, roomManager); + roomDisconnectUseCase({ + roomManager, + socketId: socket.id, + emitToRoom: createEmitToRoom(io), + }); }; diff --git a/apps/server/src/network/handlers/room/registerRoomHandlers.ts b/apps/server/src/network/handlers/room/registerRoomHandlers.ts index cafbe17..f5173b5 100644 --- a/apps/server/src/network/handlers/room/registerRoomHandlers.ts +++ b/apps/server/src/network/handlers/room/registerRoomHandlers.ts @@ -1,11 +1,27 @@ import { Server, Socket } from "socket.io"; import { RoomManager } from "@server/domains/room/RoomManager"; -import { registerRoomHandlers as registerDomainRoomHandlers } from "@server/domains/room/RoomHandler"; +import { protocol } from "@repo/shared"; +import type { roomTypes } from "@repo/shared"; +import { joinRoomUseCase } from "@server/domains/room/application/useCases/joinRoomUseCase"; +import { createCommonHandlerContext } from "@server/network/handlers/CommonHandler"; export const registerRoomHandlers = ( io: Server, socket: Socket, roomManager: RoomManager ) => { - registerDomainRoomHandlers(io, socket, roomManager); + const common = createCommonHandlerContext(io, socket); + + socket.on(protocol.SocketEvents.JOIN_ROOM, (data: roomTypes.JoinRoomPayload) => { + const { roomId } = data; + + socket.join(roomId); + + joinRoomUseCase({ + roomManager, + socketId: socket.id, + data, + emitToRoom: common.emitToRoom, + }); + }); };