From ff3aed0ba94eb7ad50e912524d1bae5b52af447b Mon Sep 17 00:00:00 2001 From: mntone <901816+mntone@users.noreply.github.com> Date: Thu, 20 Jun 2024 22:22:36 +0900 Subject: [PATCH] Adds support for any null field in telemetry JSON. --- src/modules/telemetry/models/telemetry.ts | 6 +++--- src/modules/telemetry/utils/processor.ts | 24 ++++++++++++++++++----- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/modules/telemetry/models/telemetry.ts b/src/modules/telemetry/models/telemetry.ts index 60cad69..6962788 100644 --- a/src/modules/telemetry/models/telemetry.ts +++ b/src/modules/telemetry/models/telemetry.ts @@ -23,11 +23,11 @@ export type ShakeGameKingEvent = ShakeBaseEvent & { export type ShakeGameUpdateEvent = ShakeBaseEvent & { event: 'game_update' color: ShakeColor - count: number + count?: number unstable: boolean } & ({ - wave: number - amount: number + wave?: number + amount?: number quota: number } | { wave: 'extra' diff --git a/src/modules/telemetry/utils/processor.ts b/src/modules/telemetry/utils/processor.ts index 2eb64f5..488016a 100644 --- a/src/modules/telemetry/utils/processor.ts +++ b/src/modules/telemetry/utils/processor.ts @@ -76,16 +76,24 @@ export class TelemetryProcessor { const diffTimestamp = ev.timestamp - this.#waveData.startTimestamp if (diffTimestamp <= this.#baseCount) { currentWave = this.#currentWave // Restore - } else { + } else if (currentWave !== undefined) { // The "wave" is clearly strange const nextWave = this.#currentWave + Math.min(5, Math.floor(diffTimestamp / 108)) - if (ev.wave < this.#currentWave || ev.wave > nextWave) { + if (currentWave < this.#currentWave || currentWave > nextWave) { return // DISPOSE!! } + } else { + return // DISPOSE!! } + } else if (currentWave === undefined) { + return // DISPOSE!! } if (this.#currentWave !== currentWave) { + if (ev.count === undefined) { + return // DISPOSE!! + } + this.#quotaCounter.reset(ev.quota) this.#baseCount = ev.count this.#currentWave = currentWave @@ -94,13 +102,13 @@ export class TelemetryProcessor { const newWaveData: ShakeDefaultWave = { wave: currentWave as DefaultWaveType, startTimestamp: ev.timestamp, - amount: ev.amount, + amount: ev.amount ?? 0 /* MAYBE 0 */, quota: this.#quotaCounter.mode, updates: [ { timestamp: ev.timestamp, count: ev.count, - amount: ev.amount, + amount: ev.amount ?? 0 /* MAYBE 0 */, unstable: ev.unstable, }, ], @@ -120,6 +128,8 @@ export class TelemetryProcessor { currentWaveData.endTimestamp = ev.timestamp } break + case undefined: + break default: if (this.#baseCount >= 100) { this.#baseCount = ev.count @@ -135,6 +145,10 @@ export class TelemetryProcessor { throw Error('Wave update is empty.') } + if (ev.amount === undefined) { + return // DISPOSE!! + } + const diffAmount = ev.amount - lastUpdate.amount if (diffAmount < 0) { return // DISPOSE!! @@ -153,7 +167,7 @@ export class TelemetryProcessor { // Create new update data const newUpdateData: ShakeUpdate = { timestamp: ev.timestamp, - count: ev.count, + count: ev.count ?? Math.floor(currentWaveData.startTimestamp - ev.timestamp + 100), amount: ev.amount, unstable: ev.unstable, } as const