clean up old games
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user