import { acronym } from '@goodgamestudios/game-alias'; export type GNI = [string, string, string]; export abstract class Ping { public gameId: string; public networkId: string; public instanceId: string; public playerId: string; public appLocator: string; constructor(ping: string) { const [gameId, networkId, instanceId, playerId] = ping.split('-'); this.gameId = gameId; this.networkId = networkId; this.instanceId = instanceId; this.playerId = playerId; this.appLocator = `ggs::${acronym(gameId)}`; } public toString(): string { return [this.gameId, this.networkId, this.instanceId, this.playerId].join('-'); } abstract get isValid(): boolean; public matchGNI([gameId, networkId, instanceId]: GNI): boolean { return this.gameId === gameId && this.networkId === networkId && this.instanceId === instanceId; } } export class LivePing extends Ping { public get isValid(): boolean { const instanceId = parseInt(this.instanceId, 10); return instanceId >= 1 || instanceId < 250; } } export class QAPing extends Ping { public get isValid(): boolean { const instanceId = parseInt(this.instanceId, 10); return instanceId > 250; } }