import * as sio from "socket.io"; import { writeFileSync } from "fs"; import { Vote } from "./events/Vote"; 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 { GetPlayerList } from "./events/GetPlayerList"; import { ChancellorPolicy } from "./events/ChancellorPolicy"; import { PresidentPolicies } from "./events/PresidentPolicies"; import { ChancellorNomination } from "./events/ChancellorNomination"; import { ExecutePlayer } from "./events/special/Execution/ExecutePlayer"; import { NextPresident } from "./events/special/SpecialElection/NextPresident"; import { ExecutiveConfirmation } from "./events/special/ExecutiveConfirmation"; import { InvestigateAffiliation } from "./events/special/InvestigateLoyalty/InvestigateAffiliation"; 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() { for (var code in active_games) { console.log(`Writing game: ${code} to disk`); writeFileSync(`${db_dir}/${code}`, active_games[code].toJSON()); }; console.log(`Finished saving games to disk.`); } // Listen to the signals for the cleanup requirement process.on(`uncaughtException`, clean_up); process.on('SIGINT', clean_up); const io = sio.listen(3000); io.on(`connection`, (socket: sio.Socket) => { console.log(`Client connected`); // Game Management socket.on(`HostGame`, (data: HostGame) => HostGame(socket, data)); socket.on(`JoinGame`, (data: JoinGame) => JoinGame(socket, data)); // Join a game socket.on(`StartGame`, (data: any) => StartGame(socket, data)); // Chancellor Nominations socket.on(`ChancellorNomination`, (data: any) => ChancellorNomination(socket, data)); socket.on(`Vote`, Vote); // Policy Receiving socket.on(`PresidentPolicies`, (data: any) => PresidentPolicies(socket, data)); socket.on(`ChancellorPolicy`, (data: any) => ChancellorPolicy(socket, data)); socket.on(`VetoRequest`, (data: any) => VetoRequest(socket, data)); socket.on(`VetoConfirm`, (data: any) => VetoConfirm(socket, data)); // Special Actions socket.on(`ExecutePlayer`, (data: any) => ExecutePlayer(socket, data)); socket.on(`NextPresident`, (data: any) => NextPresident(socket, data)); socket.on(`ExecutiveConfirmation`, (data: any) => ExecutiveConfirmation(socket, data)); socket.on(`InvestigateAffiliation`, (data: any) => InvestigateAffiliation(socket, data)); // Utility Events socket.on(`GetPlayerList`, (data: GetPlayerList) => GetPlayerList(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`) });