diff --git a/server/src/config/services.ts b/server/src/config/services.ts index 1d8558f9c..953d89b0f 100644 --- a/server/src/config/services.ts +++ b/server/src/config/services.ts @@ -82,6 +82,7 @@ import { PageSpeedProvider } from "@/service/infrastructure/network/PageSpeedPro import { HardwareProvider } from "@/service/infrastructure/network/HardwareProvider.js"; import { DockerProvider } from "@/service/infrastructure/network/DockerProvider.js"; import { PortProvider } from "@/service/infrastructure/network/PortProvider.js"; +import { GameProvider } from "@/service/infrastructure/network/GameProvider.js"; export type InitializedServices = { settingsService: any; @@ -159,6 +160,7 @@ export const initializeServices = async ({ const hardwareProvider = new HardwareProvider(httpProvider); const dockerProvider = new DockerProvider(logger, Docker); const portProvider = new PortProvider(net); + const gameProvider = new GameProvider(logger, GameDig); const networkService = new NetworkService( axios, @@ -180,7 +182,8 @@ export const initializeServices = async ({ pageSpeedProvider, hardwareProvider, dockerProvider, - portProvider + portProvider, + gameProvider ); const emailService = new EmailService(settingsService, fs, path, compile, mjml2html, nodemailer, logger); diff --git a/server/src/service/infrastructure/networkService.ts b/server/src/service/infrastructure/networkService.ts index f535eae6c..d727345da 100644 --- a/server/src/service/infrastructure/networkService.ts +++ b/server/src/service/infrastructure/networkService.ts @@ -101,6 +101,7 @@ class NetworkService implements INetworkService { private hardwareProvider; private dockerProvider; private portProvider; + private gameProvider; private buildStatusResponse = ({ monitor, @@ -176,7 +177,8 @@ class NetworkService implements INetworkService { pagespeedProvider: IStatusProvider, hardwareProvider: IStatusProvider, dockerProvider: IStatusProvider, - portProvider: IStatusProvider + portProvider: IStatusProvider, + gameProvider: IStatusProvider ) { this.TYPE_PING = "ping"; this.TYPE_HTTP = "http"; @@ -208,6 +210,7 @@ class NetworkService implements INetworkService { this.hardwareProvider = hardwareProvider; this.dockerProvider = dockerProvider; this.portProvider = portProvider; + this.gameProvider = gameProvider; const cacheable = new CacheableLookup(); this.got = got.extend({ @@ -266,7 +269,7 @@ class NetworkService implements INetworkService { case this.TYPE_PORT: return await this.portProvider.handle(monitor); case this.TYPE_GAME: - return await this.requestGame(monitor); + return await this.gameProvider.handle(monitor); case this.TYPE_GRPC: return await this.requestGrpc(monitor); default: @@ -628,53 +631,6 @@ class NetworkService implements INetworkService { } } - private async requestGame(monitor: Monitor): Promise> { - try { - const { url, port, gameId } = monitor; - - const gameResponse = this.buildStatusResponse({ - monitor, - overrides: { - code: 200, - status: true, - message: "Success", - }, - }); - - const state = await this.GameDig.query({ - type: gameId ?? "unknown", - host: url, - port: port ?? 0, - }).catch((error: unknown): undefined => { - this.logger.warn({ - message: error instanceof Error ? error.message : String(error), - service: this.SERVICE_NAME, - method: "requestGame", - details: { url, port, gameId }, - }); - return undefined; - }); - - if (!state) { - gameResponse.code = this.NETWORK_ERROR; - gameResponse.status = false; - gameResponse.message = "No response"; - return gameResponse; - } - - gameResponse.responseTime = state.ping ?? 0; - gameResponse.payload = state as GameStatusPayload; - return gameResponse; - } catch (err: unknown) { - const originalMessage = err instanceof Error ? err.message : String(err); - throw new AppError({ - message: originalMessage || "Error performing game server check", - service: this.SERVICE_NAME, - method: "requestGame", - details: { url: monitor.url, port: monitor.port, gameId: monitor.gameId }, - }); - } - } private async requestGrpc(monitor: Monitor): Promise> { try { const { url, port, ignoreTlsErrors } = monitor;