diff --git a/apps/server/src/domains/game/GameManager.ts b/apps/server/src/domains/game/GameManager.ts deleted file mode 100644 index cd8ab82..0000000 --- a/apps/server/src/domains/game/GameManager.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { type TickData } from "./GameLoop"; -import { Player } from "./entities/Player.js"; -import { GameSessionService } from "./application/services/GameSessionService"; - -// プレイヤー集合の生成・更新・参照管理クラス -export class GameManager { - private gameSessionService: GameSessionService; - - constructor() { - this.gameSessionService = new GameSessionService(); - } - - // 外部(GameHandlerなど)から開始時刻を取得できるようにする - getRoomStartTime(roomId: string): number | undefined { - return this.gameSessionService.getRoomStartTime(roomId); - } - - // プレイヤー登録解除処理 - removePlayer(id: string) { - this.gameSessionService.removePlayer(id); - } - - // 指定プレイヤー座標更新処理 - movePlayer(id: string, x: number, y: number) { - this.gameSessionService.movePlayer(id, x, y); - } - - /** - * 20Hz固定のゲームループを開始する - * @param roomId ルームID - * @param playerIds このルームに参加しているプレイヤーのIDリスト - * @param onTick 毎フレーム実行される送信用のコールバック関数 - */ - startGameLoop( - roomId: string, - playerIds: string[], - onTick: (data: TickData) => void, - onGameEnd: () => void - ) { - this.gameSessionService.startGameLoop(roomId, playerIds, onTick, onGameEnd); - } - - // 指定ルームのプレイヤーを取得 - getRoomPlayers(roomId: string): Player[] { - return this.gameSessionService.getRoomPlayers(roomId); - } -} \ No newline at end of file diff --git a/apps/server/src/domains/game/GameSessionManager.ts b/apps/server/src/domains/game/GameSessionManager.ts new file mode 100644 index 0000000..021f3f3 --- /dev/null +++ b/apps/server/src/domains/game/GameSessionManager.ts @@ -0,0 +1,47 @@ +import { type TickData } from "./GameLoop"; +import { Player } from "./entities/Player.js"; +import { GameSessionService } from "./application/services/GameSessionService"; + +// ルーム単位セッションの生成・更新・参照管理クラス +export class GameSessionManager { + private gameSessionService: GameSessionService; + + constructor() { + this.gameSessionService = new GameSessionService(); + } + + // 外部(GameHandlerなど)から開始時刻を取得できるようにする + getRoomStartTime(roomId: string): number | undefined { + return this.gameSessionService.getRoomStartTime(roomId); + } + + // プレイヤー登録解除処理 + removePlayer(id: string) { + this.gameSessionService.removePlayer(id); + } + + // 指定プレイヤー座標更新処理 + movePlayer(id: string, x: number, y: number) { + this.gameSessionService.movePlayer(id, x, y); + } + + /** + * 20Hz固定のゲームループを開始する + * @param roomId ルームID + * @param playerIds このルームに参加しているプレイヤーのIDリスト + * @param onTick 毎フレーム実行される送信用のコールバック関数 + */ + startRoomSession( + roomId: string, + playerIds: string[], + onTick: (data: TickData) => void, + onGameEnd: () => void + ) { + this.gameSessionService.startRoomSession(roomId, playerIds, onTick, onGameEnd); + } + + // 指定ルームのプレイヤーを取得 + getRoomPlayers(roomId: string): Player[] { + return this.gameSessionService.getRoomPlayers(roomId); + } +} \ No newline at end of file diff --git a/apps/server/src/domains/game/application/ports/gameUseCasePorts.ts b/apps/server/src/domains/game/application/ports/gameUseCasePorts.ts index 2d41bd2..7cdb2d0 100644 --- a/apps/server/src/domains/game/application/ports/gameUseCasePorts.ts +++ b/apps/server/src/domains/game/application/ports/gameUseCasePorts.ts @@ -2,7 +2,7 @@ import type { playerTypes } from "@repo/shared"; export interface StartGamePort { - startGameLoop( + startRoomSession( roomId: string, playerIds: string[], onTick: (data: TickData) => void, diff --git a/apps/server/src/domains/game/application/services/GameSessionService.ts b/apps/server/src/domains/game/application/services/GameSessionService.ts index 53e9075..634ac0a 100644 --- a/apps/server/src/domains/game/application/services/GameSessionService.ts +++ b/apps/server/src/domains/game/application/services/GameSessionService.ts @@ -20,7 +20,7 @@ return this.sessions.get(roomId)?.getPlayers() ?? []; } - public startGameLoop( + public startRoomSession( roomId: string, playerIds: string[], onTick: (data: TickData) => void, diff --git a/apps/server/src/domains/game/application/useCases/startGameUseCase.ts b/apps/server/src/domains/game/application/useCases/startGameUseCase.ts index 835e92a..b8991db 100644 --- a/apps/server/src/domains/game/application/useCases/startGameUseCase.ts +++ b/apps/server/src/domains/game/application/useCases/startGameUseCase.ts @@ -55,7 +55,7 @@ const playerIds = room.players.map((p: { id: string }) => p.id); - gameManager.startGameLoop( + gameManager.startRoomSession( room.roomId, playerIds, (tickData) => { diff --git a/apps/server/src/network/SocketManager.ts b/apps/server/src/network/SocketManager.ts index 39372ed..f986526 100644 --- a/apps/server/src/network/SocketManager.ts +++ b/apps/server/src/network/SocketManager.ts @@ -3,17 +3,17 @@ * Socket.IO接続ハンドラの登録を初期化するマネージャ */ import { Server } from "socket.io"; -import { GameManager } from "@server/domains/game/GameManager"; +import { GameSessionManager } from "@server/domains/game/GameSessionManager"; import { RoomManager } from "@server/domains/room/RoomManager"; import { registerConnectionHandlers } from "./handlers/registerConnectionHandlers"; /** Socket.IOの接続ハンドラ登録を統括する */ export class SocketManager { private io: Server; - private gameManager: GameManager; + private gameManager: GameSessionManager; private roomManager: RoomManager; - constructor(io: Server, gameManager: GameManager, roomManager: RoomManager) { + constructor(io: Server, gameManager: GameSessionManager, roomManager: RoomManager) { this.io = io; this.gameManager = gameManager; this.roomManager = roomManager; diff --git a/apps/server/src/network/bootstrap/boot.ts b/apps/server/src/network/bootstrap/boot.ts index 29ba1ff..59005a9 100644 --- a/apps/server/src/network/bootstrap/boot.ts +++ b/apps/server/src/network/bootstrap/boot.ts @@ -3,7 +3,7 @@ * HTTPサーバにSocket.IOと各マネージャを接続して起動準備を行う */ import type { Server as HttpServer } from "http"; -import { GameManager } from "@server/domains/game/GameManager"; +import { GameSessionManager } from "@server/domains/game/GameSessionManager"; import { RoomManager } from "@server/domains/room/RoomManager"; import { SocketManager } from "../SocketManager"; import { createIo } from "./createIo"; @@ -12,7 +12,7 @@ export const boot = (httpServer: HttpServer) => { // ネットワーク層とドメイン層の依存を構築する const io = createIo(httpServer); - const gameManager = new GameManager(); + const gameManager = new GameSessionManager(); const roomManager = new RoomManager(); const socketManager = new SocketManager(io, gameManager, roomManager); diff --git a/apps/server/src/network/handlers/game/handleGameDisconnect.ts b/apps/server/src/network/handlers/game/handleGameDisconnect.ts index 0a7be66..6a25232 100644 --- a/apps/server/src/network/handlers/game/handleGameDisconnect.ts +++ b/apps/server/src/network/handlers/game/handleGameDisconnect.ts @@ -3,14 +3,14 @@ * ゲーム切断ユースケースを呼び出してプレイヤー離脱を配信する */ import { Server } from "socket.io"; -import { GameManager } from "@server/domains/game/GameManager"; +import { GameSessionManager } from "@server/domains/game/GameSessionManager"; import { disconnectUseCase } from "@server/domains/game/application/useCases/disconnectUseCase"; import { createGameDisconnectPublisher } from "./createGameEventPublisher"; /** 切断したプレイヤーをゲーム管理から除外し通知する */ export const handleGameDisconnect = ( io: Server, - gameManager: GameManager, + gameManager: GameSessionManager, roomId: string | undefined, playerId: string ) => { diff --git a/apps/server/src/network/handlers/game/registerGameHandlers.ts b/apps/server/src/network/handlers/game/registerGameHandlers.ts index 29d3511..4e2f2c3 100644 --- a/apps/server/src/network/handlers/game/registerGameHandlers.ts +++ b/apps/server/src/network/handlers/game/registerGameHandlers.ts @@ -3,7 +3,7 @@ * ゲーム関連イベントの受信ハンドラを登録する */ import { Server, Socket } from "socket.io"; -import { GameManager } from "@server/domains/game/GameManager"; +import { GameSessionManager } from "@server/domains/game/GameSessionManager"; import { RoomManager } from "@server/domains/room/RoomManager"; import { protocol } from "@repo/shared"; import type { playerTypes } from "@repo/shared"; @@ -20,7 +20,7 @@ export const registerGameHandlers = ( io: Server, socket: Socket, - gameManager: GameManager, + gameManager: GameSessionManager, roomManager: RoomManager ) => { const common = createCommonHandlerContext(io, socket); diff --git a/apps/server/src/network/handlers/registerConnectionHandlers.ts b/apps/server/src/network/handlers/registerConnectionHandlers.ts index fa871f9..a64fd5b 100644 --- a/apps/server/src/network/handlers/registerConnectionHandlers.ts +++ b/apps/server/src/network/handlers/registerConnectionHandlers.ts @@ -3,7 +3,7 @@ * 接続時にルームとゲームの各ハンドラを登録する */ import { Server, Socket } from "socket.io"; -import { GameManager } from "@server/domains/game/GameManager"; +import { GameSessionManager } from "@server/domains/game/GameSessionManager"; import { RoomManager } from "@server/domains/room/RoomManager"; import { protocol } from "@repo/shared"; import { registerRoomHandlers, handleRoomDisconnect } from "./RoomHandler"; @@ -12,7 +12,7 @@ type RegisterConnectionHandlersParams = { io: Server; - gameManager: GameManager; + gameManager: GameSessionManager; roomManager: RoomManager; };