From 533400b1b9b95312e553af8c80f5efe0c77927a6 Mon Sep 17 00:00:00 2001 From: Hide_D Date: Tue, 12 Mar 2024 16:57:02 +0000 Subject: [PATCH] =?UTF-8?q?LoggerEngine=EC=9D=84=20=EC=9D=B4=EC=96=B4?= =?UTF-8?q?=EB=B6=99=EC=9D=B4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- @sammo/game_logic/src/GameLogger.ts | 10 +++++++++- @sammo/game_logic/src/index.ts | 1 + @sammo/server/src/GameEngine.ts | 6 +++++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/@sammo/game_logic/src/GameLogger.ts b/@sammo/game_logic/src/GameLogger.ts index 71a779c..ffedae1 100644 --- a/@sammo/game_logic/src/GameLogger.ts +++ b/@sammo/game_logic/src/GameLogger.ts @@ -29,8 +29,12 @@ export class GameLoggerEngine { ) { } - public static initInstance(rsc: IResourceController) { + public static initInstance(rsc: IResourceController): GameLoggerEngine{ + if(GameLoggerEngine.instance){ + throw new Error("GameLogger is already initialized"); + } GameLoggerEngine.instance = new GameLoggerEngine(rsc); + return GameLoggerEngine.instance; } public static getInstance(): GameLoggerEngine { @@ -61,8 +65,12 @@ export class GameLoggerEngine { } flushAll() { + if(this.logStack.size === 0){ + return; + } //rsc? throw new Error("Not yet implemented"); + this.logStack.clear(); } } diff --git a/@sammo/game_logic/src/index.ts b/@sammo/game_logic/src/index.ts index 1751e19..c07b8a1 100644 --- a/@sammo/game_logic/src/index.ts +++ b/@sammo/game_logic/src/index.ts @@ -2,5 +2,6 @@ export * from "./LogicFunc/generalStats.js"; export * as defs from "./defs.js"; export * from "./IResourceController.js"; export * from "./ActionRequest/index.js"; +export * from "./GameLogger.js"; // NOTE: game_logic은 client, server 모두에서 사용되는 라이브러리이다. // DB에 접근한다면 DI여야하나? \ No newline at end of file diff --git a/@sammo/server/src/GameEngine.ts b/@sammo/server/src/GameEngine.ts index 5bdd73f..4d9256e 100644 --- a/@sammo/server/src/GameEngine.ts +++ b/@sammo/server/src/GameEngine.ts @@ -5,7 +5,7 @@ import { entriesWithType } from "@sammo/util/converter"; import db from "./connectDB.js"; import type { Mongoose } from "mongoose"; import type { ActionPack, GameEngineMsg } from "./GameEngineDefs.js"; -import { ActionRequestList, type QueueType } from "@sammo/game_logic"; +import { ActionRequestList, GameLoggerEngine, type QueueType } from "@sammo/game_logic"; export interface ActionRequest { name: keyof ActionPack; args: Parameters[1]; @@ -45,12 +45,14 @@ export class GameEngine { } as const satisfies Record>; private rsc: ResourceController + private loggerEngine: GameLoggerEngine; private constructor( db: Mongoose, private postStatus: (msg: GameEngineMsg) => void, ) { this.rsc = new ResourceController(db); + this.loggerEngine = GameLoggerEngine.initInstance(this.rsc); } private continueRun = true; @@ -88,6 +90,7 @@ export class GameEngine { if (processedGeneralCount > 0) { await this.prevSaveWaiter; const lastExecuted = this.rsc.gameEnv().raw.lastExecuted; + this.loggerEngine.flushAll(); this.prevSaveWaiter = this.rsc.saveAll().then(() => { this.postStatus({ type: 'update', @@ -132,6 +135,7 @@ export class GameEngine { if (processEventCount > 0) { await this.prevSaveWaiter; this.prevSaveWaiter = null; + this.loggerEngine.flushAll(); await this.rsc.saveAll(); for (const response of responseQueue) { response();