Add cleanup functions for the games.
This commit is contained in:
parent
5786ad2742
commit
a5c9631819
1 changed files with 58 additions and 0 deletions
58
server/src/utils/cleanup.ts
Normal file
58
server/src/utils/cleanup.ts
Normal file
|
|
@ -0,0 +1,58 @@
|
||||||
|
import { writeFileSync } from "fs";
|
||||||
|
import { Game } from "../objects/Game";
|
||||||
|
import { games, conf, log } from "../main";
|
||||||
|
|
||||||
|
export function processExit() {
|
||||||
|
/**
|
||||||
|
* This is the cleanup code that runs when the server has been exited for
|
||||||
|
* any reason. We check all games if they have any active connection(s),
|
||||||
|
* then if they do, we save the game to disk, if not we just delete it
|
||||||
|
* completely from the system.
|
||||||
|
*/
|
||||||
|
log.info(`Cleaning up games`)
|
||||||
|
for (var gc in games) {
|
||||||
|
let game = games[gc];
|
||||||
|
if (activeGame(game)) {
|
||||||
|
game.log.debug(`Saving to datastore`);
|
||||||
|
writeFileSync(
|
||||||
|
`${conf.datastores.directory}/${game.id}.game`,
|
||||||
|
JSON.stringify(game.toJSON())
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
game.log.debug(`Deleting game`);
|
||||||
|
delete games[gc];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
log.info(`Done cleaning up games`);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
export async function checkSocketConnections() {
|
||||||
|
/**
|
||||||
|
* This is the cleanup that occurs whenever a new game has been started
|
||||||
|
*/
|
||||||
|
log.info(`[checkSocketConnections] Checking for games to clean up`)
|
||||||
|
for (var gc in games) {
|
||||||
|
let game = games[gc];
|
||||||
|
if (!activeGame(game)) {
|
||||||
|
game.log.debug(`[checkSocketConnections] Deleting game`);
|
||||||
|
delete games[gc];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
log.info(`[checkSocketConnections] Done cleaning up games`);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
function activeGame(game: Game): boolean {
|
||||||
|
/**
|
||||||
|
* This checks if a game is still active by checking that is at least one
|
||||||
|
* socket client still connected. If not then the game is considered
|
||||||
|
* stagnant and will be deleted by the cleanup code.
|
||||||
|
*/
|
||||||
|
for (var player of game.players) {
|
||||||
|
if (player.socket.connected) {
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
return false;
|
||||||
|
};
|
||||||
Loading…
Add table
Add a link
Reference in a new issue