import { action, observable } from 'mobx'; import { Networking } from '../Network'; export class PingManager { // create static instance and getter for global use @observable static _instance: PingManager; static get Instance(): PingManager { return PingManager._instance; } @observable IsBeating: boolean = true; private setIsBeating = action((status: boolean) => (this.IsBeating = status)); sendPing = async (): Promise => { try { await Networking.PostToServer('/ping', { date: new Date() }); !this.IsBeating && this.setIsBeating(true); } catch { console.error('ping error'); this.IsBeating && this.setIsBeating(false); } }; // not used now, but may need to clear interval private _interval: NodeJS.Timeout | null = null; INTERVAL_SECONDS = 1; constructor() { PingManager._instance = this; this._interval = setInterval(this.sendPing, this.INTERVAL_SECONDS * 1000); } }