import { NetworkPlayer } from "./entities/player/NetworkPlayer"; import { LoggingService } from "../common/LoggingService"; 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 notifyPlayer(player: NetworkPlayer, event: string, data: any = {}, timeoutSecs: number = 900): Promise { try { const response = await this.io.to(player.socketId) .timeout(timeoutSecs * 1000) .emitWithAck(event, data); return response[0] } catch (error) { this.logger.error(error); return false; } } async sendEvent(player: NetworkPlayer, event: string, data?: any) { const eventData = { event, data }; this.io.to(player.socketId).emit('game-event', eventData); } async sendEventWithAck(player: NetworkPlayer, event: string, data: any, timeoutSecs: number = 900) { const eventData = { event, data }; const response = await this.io.to(player.socketId) .timeout(timeoutSecs * 1000).emitWithAck('game-event-ack', eventData); return response[0]; } async broadcast(event: string, data: any) { const responses = await this.io.emit(event, data); this.logger.debug('responses :>> ', responses); return true; } }