diff --git a/apps/server/src/domains/game/GameLoop.ts b/apps/server/src/domains/game/GameLoop.ts index 65a7e69..2d9ac33 100644 --- a/apps/server/src/domains/game/GameLoop.ts +++ b/apps/server/src/domains/game/GameLoop.ts @@ -2,6 +2,7 @@ import { MapStore } from "./states/MapStore"; import { gridMapLogic, config } from "@repo/shared"; import type { gridMapTypes } from "@repo/shared"; +import { logEvent } from "@server/network/logging/logEvent"; // コールバックで渡すデータの型定義 export interface TickData { @@ -76,14 +77,23 @@ }, this.tickRate); - console.log(`[GameLoop] Started for room: ${this.roomId} at ${this.tickRate}ms`); + logEvent("GameLoop", { + event: "GAME_LOOP", + result: "started", + roomId: this.roomId, + tickRate: this.tickRate, + }); } stop() { if (this.loopId) { clearInterval(this.loopId); this.loopId = null; - console.log(`[GameLoop] Stopped for room: ${this.roomId}`); + logEvent("GameLoop", { + event: "GAME_LOOP", + result: "stopped", + roomId: this.roomId, + }); } } } \ No newline at end of file diff --git a/apps/server/src/domains/game/application/services/GameSessionService.ts b/apps/server/src/domains/game/application/services/GameSessionService.ts index ab33e56..48a5e3b 100644 --- a/apps/server/src/domains/game/application/services/GameSessionService.ts +++ b/apps/server/src/domains/game/application/services/GameSessionService.ts @@ -3,6 +3,7 @@ import { GameLoop, type TickData } from "../../GameLoop"; import { Player } from "../../entities/Player.js"; import { MapStore } from "../../states/MapStore"; +import { logEvent } from "@server/network/logging/logEvent"; export class GameSessionService { private mapStore: MapStore; @@ -26,7 +27,11 @@ onGameEnd: () => void ) { if (this.gameLoops.has(roomId)) { - console.log("[GameManager] startGameLoop ignored (already running)", { roomId }); + logEvent("GameSessionService", { + event: "START_GAME_LOOP", + result: "ignored_already_running", + roomId, + }); return; } @@ -49,7 +54,12 @@ loop.start(); this.gameLoops.set(roomId, loop); - console.log("[GameManager] game loop started", { roomId, playerCount: playerIds.length }); + logEvent("GameSessionService", { + event: "START_GAME_LOOP", + result: "started", + roomId, + playerCount: playerIds.length, + }); } public stopGameLoop(roomId: string) { @@ -58,9 +68,17 @@ loop.stop(); this.gameLoops.delete(roomId); this.roomStartTimes.delete(roomId); - console.log("[GameManager] game loop stopped", { roomId }); + logEvent("GameSessionService", { + event: "STOP_GAME_LOOP", + result: "stopped", + roomId, + }); } else { - console.log("[GameManager] stopGameLoop ignored (not running)", { roomId }); + logEvent("GameSessionService", { + event: "STOP_GAME_LOOP", + result: "ignored_not_running", + roomId, + }); } } diff --git a/apps/server/src/domains/game/application/services/PlayerRegistry.ts b/apps/server/src/domains/game/application/services/PlayerRegistry.ts index 5233ce4..e42e35e 100644 --- a/apps/server/src/domains/game/application/services/PlayerRegistry.ts +++ b/apps/server/src/domains/game/application/services/PlayerRegistry.ts @@ -1,5 +1,6 @@ import { config } from "@repo/shared"; import { Player } from "../../entities/Player.js"; +import { logEvent } from "@server/network/logging/logEvent"; export class PlayerRegistry { private players: Map; @@ -13,16 +14,30 @@ player.x = config.GAME_CONFIG.GRID_COLS / 2; player.y = config.GAME_CONFIG.GRID_ROWS / 2; this.players.set(id, player); - console.log("[GameManager] player added", { playerId: id, totalPlayers: this.players.size }); + logEvent("PlayerRegistry", { + event: "PLAYER_ADD", + result: "added", + socketId: id, + totalPlayers: this.players.size, + }); return player; } public removePlayer(id: string) { const existed = this.players.delete(id); if (existed) { - console.log("[GameManager] player removed", { playerId: id, totalPlayers: this.players.size }); + logEvent("PlayerRegistry", { + event: "PLAYER_REMOVE", + result: "removed", + socketId: id, + totalPlayers: this.players.size, + }); } else { - console.log("[GameManager] player remove ignored (not found)", { playerId: id }); + logEvent("PlayerRegistry", { + event: "PLAYER_REMOVE", + result: "ignored_not_found", + socketId: id, + }); } } @@ -33,15 +48,29 @@ public movePlayer(id: string, x: number, y: number) { const player = this.players.get(id); if (player) { - console.log(`Move Request -> ID:${id.slice(0, 4)} x:${Math.round(x)} y:${Math.round(y)}`); + logEvent("PlayerRegistry", { + event: "MOVE", + result: "received", + socketId: id, + x: Math.round(x), + y: Math.round(y), + }); if (typeof x !== "number" || typeof y !== "number" || isNaN(x) || isNaN(y)) { - console.log("⚠️ 無効なデータなので無視しました"); + logEvent("PlayerRegistry", { + event: "MOVE", + result: "ignored_invalid_payload", + socketId: id, + }); return; } player.x = x; player.y = y; } else { - console.log("[GameManager] move ignored (player not found)", { playerId: id }); + logEvent("PlayerRegistry", { + event: "MOVE", + result: "ignored_player_not_found", + socketId: id, + }); } } diff --git a/apps/server/src/domains/game/application/useCases/disconnectUseCase.ts b/apps/server/src/domains/game/application/useCases/disconnectUseCase.ts index 1db69d0..660cd23 100644 --- a/apps/server/src/domains/game/application/useCases/disconnectUseCase.ts +++ b/apps/server/src/domains/game/application/useCases/disconnectUseCase.ts @@ -1,5 +1,6 @@ import { protocol } from "@repo/shared"; import type { DisconnectPlayerPort } from "../ports/gameUseCasePorts"; +import { logEvent } from "@server/network/logging/logEvent"; type EmitToAll = (event: string, payload?: unknown) => void; @@ -16,5 +17,9 @@ }: DisconnectUseCaseParams) => { gameManager.removePlayer(playerId); emitToAll(protocol.SocketEvents.REMOVE_PLAYER, playerId); - console.log("[GameHandler] player removed", { playerId }); + logEvent("GameUseCase", { + event: "DISCONNECT", + result: "player_removed", + socketId: playerId, + }); }; diff --git a/apps/server/src/domains/game/application/useCases/readyForGameUseCase.ts b/apps/server/src/domains/game/application/useCases/readyForGameUseCase.ts index 92ab796..8681f3f 100644 --- a/apps/server/src/domains/game/application/useCases/readyForGameUseCase.ts +++ b/apps/server/src/domains/game/application/useCases/readyForGameUseCase.ts @@ -1,5 +1,6 @@ import { protocol } from "@repo/shared"; import type { ReadyForGamePort } from "../ports/gameUseCasePorts"; +import { logEvent } from "@server/network/logging/logEvent"; type EmitToSocket = (event: string, payload?: unknown) => void; @@ -19,13 +20,20 @@ const allPlayers = gameManager.getAllPlayers(); emitToSocket(protocol.SocketEvents.CURRENT_PLAYERS, allPlayers); - console.log("[GameHandler] READY_FOR_GAME received", { + logEvent("GameUseCase", { + event: "READY_FOR_GAME", + result: "received", socketId, + roomId, totalPlayers: allPlayers.length, }); if (!roomId) { - console.log("[GameHandler] READY_FOR_GAME missing roomId", { socketId }); + logEvent("GameUseCase", { + event: "READY_FOR_GAME", + result: "ignored_missing_room", + socketId, + }); return; } @@ -35,7 +43,9 @@ } emitToSocket(protocol.SocketEvents.GAME_START, { startTime }); - console.log("[GameHandler] GAME_START sent to ready client", { + logEvent("GameUseCase", { + event: "GAME_START", + result: "emitted", socketId, roomId, startTime, diff --git a/apps/server/src/domains/game/application/useCases/startGameUseCase.ts b/apps/server/src/domains/game/application/useCases/startGameUseCase.ts index 41b2772..0362675 100644 --- a/apps/server/src/domains/game/application/useCases/startGameUseCase.ts +++ b/apps/server/src/domains/game/application/useCases/startGameUseCase.ts @@ -1,6 +1,7 @@ import { protocol, roomConsts } from "@repo/shared"; import { RoomManager } from "@server/domains/room/RoomManager"; import type { StartGamePort } from "../ports/gameUseCasePorts"; +import { logEvent } from "@server/network/logging/logEvent"; type EmitToRoom = (roomId: string, event: string, payload?: unknown) => void; @@ -19,18 +20,29 @@ }: StartGameUseCaseParams) => { const room = roomManager.getRoomByOwnerId(ownerId); if (!room) { - console.log("[GameHandler] START_GAME ignored (no room)", { socketId: ownerId }); + logEvent("GameUseCase", { + event: "START_GAME", + result: "ignored_no_room", + socketId: ownerId, + }); return; } if (room.status === roomConsts.RoomPhase.PLAYING) { - console.log("[GameHandler] START_GAME ignored (already playing)", { roomId: room.roomId }); + logEvent("GameUseCase", { + event: "START_GAME", + result: "ignored_already_playing", + roomId: room.roomId, + socketId: ownerId, + }); return; } - console.log("[GameHandler] START_GAME accepted", { + logEvent("GameUseCase", { + event: "START_GAME", + result: "accepted", roomId: room.roomId, - ownerId, + socketId: ownerId, totalPlayers: room.players.length, }); @@ -55,7 +67,12 @@ } }, () => { - console.log(`[GameHandler] ルーム ${room.roomId} のゲームが終了しました (3分経過)`); + logEvent("GameUseCase", { + event: "GAME_END", + result: "emitted", + roomId: room.roomId, + reason: "duration_elapsed", + }); emitToRoom(room.roomId, protocol.SocketEvents.GAME_END); room.status = roomConsts.RoomPhase.WAITING; } diff --git a/apps/server/src/domains/room/application/services/RoomExitService.ts b/apps/server/src/domains/room/application/services/RoomExitService.ts index 9fcdc6e..7378f7d 100644 --- a/apps/server/src/domains/room/application/services/RoomExitService.ts +++ b/apps/server/src/domains/room/application/services/RoomExitService.ts @@ -1,4 +1,5 @@ import type { roomTypes } from "@repo/shared"; +import { logEvent } from "@server/network/logging/logEvent"; export class RoomExitService { constructor(private rooms: Map) {} @@ -13,7 +14,9 @@ } room.players.splice(playerIndex, 1); - console.log("[RoomManager] player left", { + logEvent("RoomExitService", { + event: "PLAYER_LEAVE", + result: "removed", roomId, socketId, totalPlayers: room.players.length, @@ -21,15 +24,23 @@ if (room.players.length === 0) { this.rooms.delete(roomId); - console.log("[RoomManager] deleted room", { roomId }); + logEvent("RoomExitService", { + event: "ROOM_DELETE", + result: "deleted", + roomId, + socketId, + }); continue; } if (room.ownerId === socketId) { room.ownerId = room.players[0].id; room.players[0].isOwner = true; - console.log("[RoomManager] transferred ownership", { + logEvent("RoomExitService", { + event: "OWNER_TRANSFER", + result: "transferred", roomId, + socketId, newOwnerId: room.ownerId, }); } diff --git a/apps/server/src/domains/room/application/services/RoomJoinService.ts b/apps/server/src/domains/room/application/services/RoomJoinService.ts index 3fe81b1..fcb5570 100644 --- a/apps/server/src/domains/room/application/services/RoomJoinService.ts +++ b/apps/server/src/domains/room/application/services/RoomJoinService.ts @@ -1,5 +1,6 @@ import { config, roomConsts } from "@repo/shared"; import type { roomTypes } from "@repo/shared"; +import { logEvent } from "@server/network/logging/logEvent"; export class RoomJoinService { constructor(private rooms: Map) {} @@ -15,7 +16,13 @@ maxPlayers: config.GAME_CONFIG.MAX_PLAYERS_PER_ROOM, }; this.rooms.set(roomId, room); - console.log("[RoomManager] created room", { roomId, ownerId: socketId }); + logEvent("RoomJoinService", { + event: "ROOM_CREATE", + result: "created", + roomId, + socketId, + ownerId: socketId, + }); } const newPlayer: roomTypes.RoomMember = { @@ -26,7 +33,9 @@ }; room.players.push(newPlayer); - console.log("[RoomManager] player joined", { + logEvent("RoomJoinService", { + event: "PLAYER_JOIN", + result: "joined", roomId, socketId, playerName, diff --git a/apps/server/src/domains/room/application/useCases/joinRoomUseCase.ts b/apps/server/src/domains/room/application/useCases/joinRoomUseCase.ts index 2123b35..f3d11b7 100644 --- a/apps/server/src/domains/room/application/useCases/joinRoomUseCase.ts +++ b/apps/server/src/domains/room/application/useCases/joinRoomUseCase.ts @@ -1,6 +1,7 @@ import { protocol } from "@repo/shared"; import type { roomTypes } from "@repo/shared"; import type { JoinRoomPort } from "../ports/roomUseCasePorts"; +import { logEvent } from "@server/network/logging/logEvent"; type EmitToRoom = (roomId: string, event: string, payload?: unknown) => void; @@ -18,13 +19,22 @@ emitToRoom, }: JoinRoomUseCaseParams) => { const { roomId, playerName } = data; - console.log("[RoomHandler] JOIN_ROOM received", { roomId, socketId, playerName }); + logEvent("RoomUseCase", { + event: "JOIN_ROOM", + result: "received", + roomId, + socketId, + playerName, + }); const room = roomManager.addPlayerToRoom(roomId, socketId, playerName); emitToRoom(roomId, protocol.SocketEvents.ROOM_UPDATE, room); - console.log("[RoomHandler] ROOM_UPDATE emitted", { + logEvent("RoomUseCase", { + event: "ROOM_UPDATE", + result: "emitted", roomId, + socketId, ownerId: room.ownerId, totalPlayers: room.players.length, }); diff --git a/apps/server/src/domains/room/application/useCases/roomDisconnectUseCase.ts b/apps/server/src/domains/room/application/useCases/roomDisconnectUseCase.ts index be33326..0d71846 100644 --- a/apps/server/src/domains/room/application/useCases/roomDisconnectUseCase.ts +++ b/apps/server/src/domains/room/application/useCases/roomDisconnectUseCase.ts @@ -1,5 +1,6 @@ import { protocol } from "@repo/shared"; import type { DisconnectRoomPort } from "../ports/roomUseCasePorts"; +import { logEvent } from "@server/network/logging/logEvent"; type EmitToRoom = (roomId: string, event: string, payload?: unknown) => void; @@ -15,15 +16,20 @@ emitToRoom, }: RoomDisconnectUseCaseParams) => { const updatedRooms = roomManager.removePlayer(socketId); - console.log("[RoomHandler] disconnect cleanup", { + logEvent("RoomUseCase", { + event: "DISCONNECT", + result: "processed", socketId, updatedRoomCount: updatedRooms.length, }); updatedRooms.forEach((room) => { emitToRoom(room.roomId, protocol.SocketEvents.ROOM_UPDATE, room); - console.log("[RoomHandler] ROOM_UPDATE emitted", { + logEvent("RoomUseCase", { + event: "ROOM_UPDATE", + result: "emitted", roomId: room.roomId, + socketId, ownerId: room.ownerId, totalPlayers: room.players.length, }); diff --git a/apps/server/src/network/logging/logEvent.ts b/apps/server/src/network/logging/logEvent.ts new file mode 100644 index 0000000..626324c --- /dev/null +++ b/apps/server/src/network/logging/logEvent.ts @@ -0,0 +1,11 @@ +type LogEventPayload = { + event: string; + result: string; + socketId?: string; + roomId?: string; + [key: string]: unknown; +}; + +export const logEvent = (scope: string, payload: LogEventPayload) => { + console.log(`[${scope}]`, payload); +};