domino-server/src/game/NetworkClientNotifier.ts
2024-07-12 16:27:52 +02:00

38 lines
1.1 KiB
TypeScript

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