import { NetworkPlayer } from "./entities/player/NetworkPlayer"; import { LoggingService } from "../common/LoggingService"; import { ServerEvents } from "./constants"; export class NetworkClientNotifier { static instance: NetworkClientNotifier; io: any; logger: LoggingService = new LoggingService(); constructor() { if (!NetworkClientNotifier.instance) { NetworkClientNotifier.instance = this; } return NetworkClientNotifier.instance } setSocket(io: any) { this.io = io; } async sendEvent(player: NetworkPlayer, event: string, data?: any) { const eventData = { event, data }; this.io.to(player.socketId).emit(ServerEvents.SERVER_EVENT, eventData); } async sendEventWithAck(player: NetworkPlayer, event: string, data: any, timeoutSecs: number = 900) { try { const eventData = { event, data }; const response = await this.io.to(player.socketId) .timeout(timeoutSecs * 1000).emitWithAck(ServerEvents.SERVER_EVENT_WITH_ACK, eventData); return response[0]; } catch (error) { this.logger.error(error, 'sendEventWithAck error'); return null; } } }