diff --git a/apps/server/src/application/coordinators/startGameCoordinator.ts b/apps/server/src/application/coordinators/startGameCoordinator.ts index cddf474..6bf674a 100644 --- a/apps/server/src/application/coordinators/startGameCoordinator.ts +++ b/apps/server/src/application/coordinators/startGameCoordinator.ts @@ -9,6 +9,7 @@ } from "@server/domains/game/application/ports/gameUseCasePorts"; import { startGameUseCase } from "@server/domains/game/application/useCases/startGameUseCase"; import { logEvent } from "@server/logging/logEvent"; +import { gameUseCaseLogEvents } from "@server/logging/logEvents"; import { roomConsts } from "@repo/shared"; type StartGameCoordinatorParams = { @@ -34,7 +35,7 @@ const room = roomManager.getRoomByOwnerId(ownerId); if (!room) { logEvent("GameUseCase", { - event: "START_GAME", + event: gameUseCaseLogEvents.START_GAME, result: "ignored_no_room", socketId: ownerId, }); @@ -43,7 +44,7 @@ if (room.status === roomConsts.RoomPhase.PLAYING) { logEvent("GameUseCase", { - event: "START_GAME", + event: gameUseCaseLogEvents.START_GAME, result: "ignored_already_playing", roomId: room.roomId, socketId: ownerId, @@ -54,7 +55,7 @@ const updatedRoom = roomManager.markRoomPlaying(room.roomId); if (!updatedRoom) { logEvent("GameUseCase", { - event: "START_GAME", + event: gameUseCaseLogEvents.START_GAME, result: "ignored_room_not_found", roomId: room.roomId, socketId: ownerId, @@ -63,7 +64,7 @@ } logEvent("GameUseCase", { - event: "START_GAME", + event: gameUseCaseLogEvents.START_GAME, result: "accepted", roomId: updatedRoom.roomId, socketId: ownerId, diff --git a/apps/server/src/domains/game/application/services/GamePlayerOperationService.ts b/apps/server/src/domains/game/application/services/GamePlayerOperationService.ts index 9874b80..787b4f4 100644 --- a/apps/server/src/domains/game/application/services/GamePlayerOperationService.ts +++ b/apps/server/src/domains/game/application/services/GamePlayerOperationService.ts @@ -3,6 +3,7 @@ * ゲームセッション内のプレイヤー移動と離脱操作を管理する */ import { logEvent } from "@server/logging/logEvent"; +import { gameDomainLogEvents } from "@server/logging/logEvents"; import { GameRoomSession } from "./GameRoomSession"; type SessionStore = Map; @@ -21,7 +22,7 @@ const roomId = this.playerToRoom.get(id); if (!roomId) { logEvent("GamePlayerOperationService", { - event: "PLAYER_MOVE", + event: gameDomainLogEvents.PLAYER_MOVE, result: "ignored_player_not_in_session", socketId: id, }); @@ -35,7 +36,7 @@ const roomId = this.playerToRoom.get(id); if (!roomId) { logEvent("GamePlayerOperationService", { - event: "PLAYER_REMOVE", + event: gameDomainLogEvents.PLAYER_REMOVE, result: "ignored_player_not_in_session", socketId: id, }); @@ -57,7 +58,7 @@ this.sessions.delete(roomId); this.roomToPlayers.delete(roomId); logEvent("GamePlayerOperationService", { - event: "PLAYER_REMOVE", + event: gameDomainLogEvents.PLAYER_REMOVE, result: "session_disposed_empty_room", roomId, socketId: id, diff --git a/apps/server/src/domains/game/application/services/GameRoomSession.ts b/apps/server/src/domains/game/application/services/GameRoomSession.ts index efe7e8e..94ee207 100644 --- a/apps/server/src/domains/game/application/services/GameRoomSession.ts +++ b/apps/server/src/domains/game/application/services/GameRoomSession.ts @@ -3,6 +3,7 @@ * 1ルーム分のゲーム進行状態とゲームループ実行を管理する */ import { logEvent } from "@server/logging/logEvent"; +import { gameDomainLogEvents } from "@server/logging/logEvents"; import type { gameTypes } from "@repo/shared"; import { GameLoop } from "../../loop/GameLoop"; import { Player } from "../../entities/player/Player.js"; @@ -59,7 +60,7 @@ const player = this.players.get(id); if (!player) { logEvent("GameRoomSession", { - event: "MOVE", + event: gameDomainLogEvents.MOVE, result: "ignored_player_not_found", roomId: this.roomId, socketId: id, @@ -69,7 +70,7 @@ if (!isValidPosition(x, y)) { logEvent("GameRoomSession", { - event: "MOVE", + event: gameDomainLogEvents.MOVE, result: "ignored_invalid_payload", roomId: this.roomId, socketId: id, diff --git a/apps/server/src/domains/game/application/services/GameSessionLifecycleService.ts b/apps/server/src/domains/game/application/services/GameSessionLifecycleService.ts index 7cc15e3..6381a47 100644 --- a/apps/server/src/domains/game/application/services/GameSessionLifecycleService.ts +++ b/apps/server/src/domains/game/application/services/GameSessionLifecycleService.ts @@ -5,6 +5,7 @@ import { config } from "@repo/shared"; import type { gameTypes } from "@repo/shared"; import { logEvent } from "@server/logging/logEvent"; +import { gameDomainLogEvents } from "@server/logging/logEvents"; import { GameRoomSession } from "./GameRoomSession"; type SessionStore = Map; @@ -35,7 +36,7 @@ ) { if (this.sessions.has(roomId)) { logEvent("GameSessionLifecycleService", { - event: "SESSION_START", + event: gameDomainLogEvents.SESSION_START, result: "ignored_already_running", roomId, }); @@ -59,7 +60,7 @@ }); logEvent("GameSessionLifecycleService", { - event: "SESSION_START", + event: gameDomainLogEvents.SESSION_START, result: "started", roomId, playerCount: playerIds.length, diff --git a/apps/server/src/domains/game/application/useCases/disconnectUseCase.ts b/apps/server/src/domains/game/application/useCases/disconnectUseCase.ts index bb6ca19..f78a1ce 100644 --- a/apps/server/src/domains/game/application/useCases/disconnectUseCase.ts +++ b/apps/server/src/domains/game/application/useCases/disconnectUseCase.ts @@ -4,6 +4,7 @@ */ import type { DisconnectPlayerPort, GameOutputPort } from "../ports/gameUseCasePorts"; import { logEvent } from "@server/logging/logEvent"; +import { gameUseCaseLogEvents } from "@server/logging/logEvents"; type DisconnectUseCaseParams = { gameManager: DisconnectPlayerPort; @@ -26,7 +27,7 @@ } logEvent("GameUseCase", { - event: "DISCONNECT", + event: gameUseCaseLogEvents.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 f4696ad..1d5321c 100644 --- a/apps/server/src/domains/game/application/useCases/readyForGameUseCase.ts +++ b/apps/server/src/domains/game/application/useCases/readyForGameUseCase.ts @@ -5,6 +5,7 @@ import type { ReadyForGamePort } from "../ports/gameUseCasePorts"; import type { GameOutputPort } from "../ports/gameUseCasePorts"; import { logEvent } from "@server/logging/logEvent"; +import { gameUseCaseLogEvents } from "@server/logging/logEvents"; type ReadyForGameUseCaseParams = { socketId: string; @@ -23,7 +24,7 @@ if (!roomId) { output.publishCurrentPlayersToSocket([]); logEvent("GameUseCase", { - event: "READY_FOR_GAME", + event: gameUseCaseLogEvents.READY_FOR_GAME, result: "ignored_missing_room", socketId, }); @@ -34,7 +35,7 @@ output.publishCurrentPlayersToSocket(roomPlayers); logEvent("GameUseCase", { - event: "READY_FOR_GAME", + event: gameUseCaseLogEvents.READY_FOR_GAME, result: "received", socketId, roomId, @@ -48,7 +49,7 @@ output.publishGameStartToSocket({ startTime }); logEvent("GameUseCase", { - event: "GAME_START", + event: gameUseCaseLogEvents.GAME_START, result: "emitted", socketId, roomId, diff --git a/apps/server/src/domains/game/application/useCases/startGameUseCase.ts b/apps/server/src/domains/game/application/useCases/startGameUseCase.ts index d6e871f..b02cf59 100644 --- a/apps/server/src/domains/game/application/useCases/startGameUseCase.ts +++ b/apps/server/src/domains/game/application/useCases/startGameUseCase.ts @@ -4,6 +4,7 @@ */ import type { GameOutputPort, StartGamePort } from "../ports/gameUseCasePorts"; import { logEvent } from "@server/logging/logEvent"; +import { gameUseCaseLogEvents } from "@server/logging/logEvents"; type StartGameUseCaseParams = { roomId: string; @@ -41,7 +42,7 @@ }, () => { logEvent("GameUseCase", { - event: "GAME_END", + event: gameUseCaseLogEvents.GAME_END, result: "emitted", roomId, reason: "duration_elapsed", diff --git a/apps/server/src/domains/game/loop/GameLoop.ts b/apps/server/src/domains/game/loop/GameLoop.ts index 0ddb36e..86d4001 100644 --- a/apps/server/src/domains/game/loop/GameLoop.ts +++ b/apps/server/src/domains/game/loop/GameLoop.ts @@ -8,6 +8,7 @@ import { config } from "@repo/shared"; import type { gameTypes } from "@repo/shared"; import { logEvent } from "@server/logging/logEvent"; +import { gameDomainLogEvents } from "@server/logging/logEvents"; /** ルーム内ゲーム進行を定周期で実行するループ管理クラス */ export class GameLoop { @@ -41,7 +42,7 @@ this.scheduleNextTick(); logEvent("GameLoop", { - event: "GAME_LOOP", + event: gameDomainLogEvents.GAME_LOOP, result: "started", roomId: this.roomId, tickRate: this.tickRate, @@ -151,7 +152,7 @@ } logEvent("GameLoop", { - event: "GAME_LOOP", + event: gameDomainLogEvents.GAME_LOOP, result: "stopped", roomId: this.roomId, elapsedMs: Math.max(0, Math.round(performance.now() - this.startMonotonicTimeMs)), diff --git a/apps/server/src/domains/room/application/services/RoomExitService.ts b/apps/server/src/domains/room/application/services/RoomExitService.ts index 36696e3..8b94508 100644 --- a/apps/server/src/domains/room/application/services/RoomExitService.ts +++ b/apps/server/src/domains/room/application/services/RoomExitService.ts @@ -4,6 +4,7 @@ */ import type { roomTypes } from "@repo/shared"; import { logEvent } from "@server/logging/logEvent"; +import { roomDomainLogEvents } from "@server/logging/logEvents"; /** 退出要求に応じてプレイヤー削除とルーム整理を行うサービス */ export class RoomExitService { @@ -20,7 +21,7 @@ room.players.splice(playerIndex, 1); logEvent("RoomExitService", { - event: "PLAYER_LEAVE", + event: roomDomainLogEvents.PLAYER_LEAVE, result: "removed", roomId, socketId, @@ -30,7 +31,7 @@ if (room.players.length === 0) { this.rooms.delete(roomId); logEvent("RoomExitService", { - event: "ROOM_DELETE", + event: roomDomainLogEvents.ROOM_DELETE, result: "deleted", roomId, socketId, @@ -42,7 +43,7 @@ room.ownerId = room.players[0].id; room.players[0].isOwner = true; logEvent("RoomExitService", { - event: "OWNER_TRANSFER", + event: roomDomainLogEvents.OWNER_TRANSFER, result: "transferred", roomId, socketId, diff --git a/apps/server/src/domains/room/application/services/RoomJoinService.ts b/apps/server/src/domains/room/application/services/RoomJoinService.ts index d096dcc..cb21ffd 100644 --- a/apps/server/src/domains/room/application/services/RoomJoinService.ts +++ b/apps/server/src/domains/room/application/services/RoomJoinService.ts @@ -5,6 +5,7 @@ import { config, roomConsts } from "@repo/shared"; import type { roomTypes } from "@repo/shared"; import { logEvent } from "@server/logging/logEvent"; +import { roomDomainLogEvents } from "@server/logging/logEvents"; import type { JoinRoomResult } from "../ports/roomUseCasePorts"; /** 参加要求に応じてルーム作成と参加者追加を行うサービス */ @@ -23,7 +24,7 @@ }; this.rooms.set(roomId, room); logEvent("RoomJoinService", { - event: "ROOM_CREATE", + event: roomDomainLogEvents.ROOM_CREATE, result: "created", roomId, socketId, @@ -35,7 +36,7 @@ const alreadyJoined = room.players.some((player) => player.id === socketId); if (alreadyJoined) { logEvent("RoomJoinService", { - event: "PLAYER_JOIN", + event: roomDomainLogEvents.PLAYER_JOIN, result: "ignored_duplicate", roomId, socketId, @@ -47,7 +48,7 @@ // ルーム満員時の参加を拒否する if (room.players.length >= room.maxPlayers) { logEvent("RoomJoinService", { - event: "PLAYER_JOIN", + event: roomDomainLogEvents.PLAYER_JOIN, result: "ignored_room_full", roomId, socketId, @@ -66,7 +67,7 @@ room.players.push(newPlayer); logEvent("RoomJoinService", { - event: "PLAYER_JOIN", + event: roomDomainLogEvents.PLAYER_JOIN, result: "joined", roomId, socketId, diff --git a/apps/server/src/domains/room/application/useCases/joinRoomUseCase.ts b/apps/server/src/domains/room/application/useCases/joinRoomUseCase.ts index 4f9a1fd..6da1059 100644 --- a/apps/server/src/domains/room/application/useCases/joinRoomUseCase.ts +++ b/apps/server/src/domains/room/application/useCases/joinRoomUseCase.ts @@ -9,6 +9,7 @@ RoomOutputPort, } from "../ports/roomUseCasePorts"; import { logEvent } from "@server/logging/logEvent"; +import { roomUseCaseLogEvents } from "@server/logging/logEvents"; type JoinRoomUseCaseParams = { roomManager: JoinRoomPort; @@ -26,7 +27,7 @@ }: JoinRoomUseCaseParams): JoinRoomResult => { const { roomId, playerName } = data; logEvent("RoomUseCase", { - event: "JOIN_ROOM", + event: roomUseCaseLogEvents.JOIN_ROOM, result: "received", roomId, socketId, @@ -41,7 +42,7 @@ }); logEvent("RoomUseCase", { - event: "JOIN_ROOM", + event: roomUseCaseLogEvents.JOIN_ROOM, result: "rejected", reason: joinResult.status, roomId, diff --git a/apps/server/src/domains/room/application/useCases/roomDisconnectUseCase.ts b/apps/server/src/domains/room/application/useCases/roomDisconnectUseCase.ts index 18b7aaf..919fdd9 100644 --- a/apps/server/src/domains/room/application/useCases/roomDisconnectUseCase.ts +++ b/apps/server/src/domains/room/application/useCases/roomDisconnectUseCase.ts @@ -5,6 +5,7 @@ import type { DisconnectRoomPort } from "../ports/roomUseCasePorts"; import type { RoomOutputPort } from "../ports/roomUseCasePorts"; import { logEvent } from "@server/logging/logEvent"; +import { roomUseCaseLogEvents } from "@server/logging/logEvents"; type RoomDisconnectUseCaseParams = { roomManager: DisconnectRoomPort; @@ -20,7 +21,7 @@ }: RoomDisconnectUseCaseParams) => { const updatedRooms = roomManager.removePlayer(socketId); logEvent("RoomUseCase", { - event: "DISCONNECT", + event: roomUseCaseLogEvents.DISCONNECT, result: "processed", socketId, updatedRoomCount: updatedRooms.length, @@ -29,7 +30,7 @@ updatedRooms.forEach((room) => { output.publishRoomUpdateToRoom(room.roomId, room); logEvent("RoomUseCase", { - event: "ROOM_UPDATE", + event: roomUseCaseLogEvents.ROOM_UPDATE, result: "emitted", roomId: room.roomId, socketId, diff --git a/apps/server/src/logging/logEvents.ts b/apps/server/src/logging/logEvents.ts new file mode 100644 index 0000000..55470da --- /dev/null +++ b/apps/server/src/logging/logEvents.ts @@ -0,0 +1,39 @@ +/** + * logEvents + * アプリケーションログで利用するイベント名定数を提供する + */ +import { protocol } from "@repo/shared"; + +/** GameUseCaseログで利用するイベント名定数 */ +export const gameUseCaseLogEvents = { + START_GAME: protocol.SocketEvents.START_GAME, + READY_FOR_GAME: protocol.SocketEvents.READY_FOR_GAME, + GAME_START: protocol.SocketEvents.GAME_START, + GAME_END: protocol.SocketEvents.GAME_END, + DISCONNECT: protocol.SocketEvents.DISCONNECT, +} as const; + +/** RoomUseCaseログで利用するイベント名定数 */ +export const roomUseCaseLogEvents = { + JOIN_ROOM: protocol.SocketEvents.JOIN_ROOM, + DISCONNECT: protocol.SocketEvents.DISCONNECT, + ROOM_UPDATE: protocol.SocketEvents.ROOM_UPDATE, +} as const; + +/** Gameドメインサービスとループログで利用するイベント名定数 */ +export const gameDomainLogEvents = { + MOVE: protocol.SocketEvents.MOVE, + SESSION_START: "SESSION_START", + PLAYER_MOVE: "PLAYER_MOVE", + PLAYER_REMOVE: "PLAYER_REMOVE", + GAME_LOOP: "GAME_LOOP", +} as const; + +/** Roomドメインサービスログで利用するイベント名定数 */ +export const roomDomainLogEvents = { + ROOM_CREATE: "ROOM_CREATE", + PLAYER_JOIN: "PLAYER_JOIN", + PLAYER_LEAVE: "PLAYER_LEAVE", + ROOM_DELETE: "ROOM_DELETE", + OWNER_TRANSFER: "OWNER_TRANSFER", +} as const;