clean up old games

This commit is contained in:
Gavin McDonald
2025-04-21 18:07:22 -04:00
parent 6856660fa0
commit 10b813ff58

View File

@@ -5,6 +5,11 @@ import { GameState, GameUpdate, Settings } from '@/types';
const deck = new Deck(); const deck = new Deck();
const SECOND = 1000;
const MINUTE = 60 * SECOND;
const HOUR = 60 * MINUTE;
const DAY = 24 * HOUR;
export default class GameStore { export default class GameStore {
private startTime: number; private startTime: number;
private dms: Map<string, GameState>; private dms: Map<string, GameState>;
@@ -18,7 +23,8 @@ export default class GameStore {
this.spectators = new Map(); this.spectators = new Map();
this.players = new Map(); this.players = new Map();
setInterval(() => this.log(), 15 * 60 * 1000); setInterval(() => this.log(), 15 * MINUTE);
setInterval(() => this.cleanUp(), HOUR);
} }
createGameIDs() { createGameIDs() {
@@ -145,8 +151,22 @@ export default class GameStore {
console.log('-'.repeat(uptimeLog.length)); console.log('-'.repeat(uptimeLog.length));
} }
deleteGame(gameID: string): void { cleanUp() {
this.dms.delete(gameID); const now = Date.now();
this.spectators.delete(gameID);
const expired = [...this.dms.values()].filter(({ lastUpdated }) => lastUpdated < now - DAY);
const unused = [...this.dms.values()].filter(
({ lastUpdated, players }) => players.size === 0 && lastUpdated < now - HOUR,
);
expired.forEach(this.deleteGame);
unused.forEach(this.deleteGame);
}
deleteGame(game: GameState): void {
console.log(Date.now(), 'DELETE', game);
this.dms.delete(game.dmID);
this.spectators.delete(game.spectatorID);
} }
} }