domino-server/src/game/NetworkClientNotifier.ts
2024-07-07 23:23:49 +02:00

50 lines
1.5 KiB
TypeScript

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<any> {
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;
}
}