95 lines
No EOL
3.4 KiB
TypeScript
95 lines
No EOL
3.4 KiB
TypeScript
import { Logger } from "tslog";
|
|
import * as sio from "socket.io";
|
|
import { writeFileSync } from "fs";
|
|
import { Game } from "./utils/Game";
|
|
import { Vote } from "./events/Vote";
|
|
import { KillGame } from "./events/KillGame";
|
|
import { JoinGame } from "./events/JoinGame";
|
|
import { HostGame } from "./events/HostGame";
|
|
import { StartGame } from "./events/StartGame";
|
|
import { VetoConfirm } from "./events/VetoConfirm";
|
|
import { VetoRequest } from "./events/VetoRequest";
|
|
import { ExecutePlayer } from "./events/ExecutePlayer";
|
|
import { GetPlayerList } from "./events/GetPlayerList";
|
|
import { NextPresident } from "./events/NextPresident";
|
|
import { InvestigateParty } from "./events/InvestigateParty";
|
|
import { ChancellorPolicy } from "./events/ChancellorPolicy";
|
|
import { PresidentPolicies } from "./events/PresidentPolicies";
|
|
import { ChancellorNomination } from "./events/ChancellorNomination";
|
|
import { ExecutiveConfirmation } from "./events/ExecutiveConfirmation";
|
|
import { LOG_LEVEL, LOG_NAME, WSS_PORT } from "./constants";
|
|
|
|
export var log: Logger = new Logger({
|
|
displayFunctionName: false,
|
|
displayLoggerName: false,
|
|
displayFilePath: `hidden`,
|
|
displayLogLevel: true,
|
|
minLevel: LOG_LEVEL || `info`,
|
|
name: LOG_NAME,
|
|
});
|
|
|
|
export var active_games: {[key: string]: Game} = {};
|
|
|
|
const db_dir = `data`;
|
|
|
|
/**
|
|
* This function is called whenever the main node process is terminated for
|
|
* whatever reason. It cleans up and writes all the active games to the disk.
|
|
*/
|
|
function clean_up() {
|
|
log.info(`Cleaning up games...`);
|
|
for (var code in active_games) {
|
|
log.debug(`Writing game: ${code} to disk`);
|
|
log.silly(active_games[code]);
|
|
// writeFileSync(`${db_dir}/${code}`, active_games[code].toJSON());
|
|
};
|
|
log.info(`Finished cleanup. Exiting.`);
|
|
process.exit(0);
|
|
};
|
|
|
|
// Listen to the signals for the cleanup requirement
|
|
process.on(`uncaughtException`, clean_up);
|
|
process.on('SIGINT', clean_up);
|
|
|
|
const io = sio.listen(WSS_PORT);
|
|
|
|
io.on(`connection`, (socket: sio.Socket) => {
|
|
log.silly(`Client connected with id ${socket.id}`);
|
|
|
|
// Game Management
|
|
socket.on(`HostGame`, (data: HostGame) => HostGame(io, socket, data));
|
|
socket.on(`JoinGame`, (data: JoinGame) => JoinGame(io, socket, data));
|
|
socket.on(`KillGame`, (data: KillGame) => KillGame(io, socket, data));
|
|
|
|
|
|
// Join a game
|
|
socket.on(`StartGame`, (data: any) => StartGame(io, socket, data));
|
|
|
|
// Chancellor Nominations
|
|
socket.on(`ChancellorNomination`, (data: any) => ChancellorNomination(io, socket, data));
|
|
socket.on(`Vote`, Vote);
|
|
|
|
// Policy Receiving
|
|
socket.on(`PresidentPolicies`, (data: any) => PresidentPolicies(io, socket, data));
|
|
socket.on(`ChancellorPolicy`, (data: any) => ChancellorPolicy(io, socket, data));
|
|
socket.on(`VetoRequest`, (data: any) => VetoRequest(io, socket, data));
|
|
socket.on(`VetoConfirm`, (data: any) => VetoConfirm(io, socket, data));
|
|
|
|
// Special Actions
|
|
socket.on(`ExecutePlayer`, (data: any) => ExecutePlayer(io, socket, data));
|
|
socket.on(`NextPresident`, (data: any) => NextPresident(io, socket, data));
|
|
socket.on(`ExecutiveConfirmation`, (data: any) => ExecutiveConfirmation(io, socket, data));
|
|
socket.on(`InvestigateParty`, (data: any) => InvestigateParty(io, socket, data));
|
|
|
|
|
|
// Utility Events
|
|
socket.on(`GetPlayerList`, (data: GetPlayerList) => GetPlayerList(io, socket, data));
|
|
});
|
|
|
|
io.on(`reconnect_attempt`, (socket: sio.Socket) => {
|
|
console.log(`Client attempting to reconnect`)
|
|
});
|
|
|
|
io.on(`disconnect`, (socket: sio.Socket) => {
|
|
console.log(`Client disconnected`)
|
|
}); |