38 lines
1.1 KiB
TypeScript
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;
|
|
}
|
|
}
|
|
}
|