Make sure games have saved and exited before stopping the server.

This should make the systemd version safe for production, though
it can't yet deal with a game that hangs and doesn't exit.
This commit is contained in:
John "Elwin" Edwards 2016-01-28 21:17:06 -05:00
parent 48e068778e
commit a94e700b58

10
rlgwebd
View file

@ -279,6 +279,10 @@ TermSession.prototype.destroy = function () {
gamemux.emit('end', this.gname, this.pname); gamemux.emit('end', this.gname, this.pname);
delete sessions[tag]; delete sessions[tag];
tslog("Game %s ended.", tag); tslog("Game %s ended.", tag);
/* Was that the last game? */
if (!allowlogin && Object.keys(sessions).length == 0) {
shutdown();
}
}; };
function DglSession(filename) { function DglSession(filename) {
@ -1168,13 +1172,15 @@ function consoleHandler(chunk) {
sessions[tag].close(); sessions[tag].close();
} }
progressWatcher.stdin.end("\n"); progressWatcher.stdin.end("\n");
setTimeout(shutdown, 2000); if (Object.keys(sessions).length == 0)
setTimeout(shutdown, 500);
/* Otherwise wait for the games to end */
} }
} }
process.on("exit", function () { process.on("exit", function () {
for (var tag in sessions) { for (var tag in sessions) {
sessions[tag].term.kill('SIGHUP'); sessions[tag].term.kill('SIGTERM');
} }
tslog("Quitting..."); tslog("Quitting...");
return; return;