feature(server) add graceful shutdown

This commit is contained in:
coderaiser 2018-11-08 10:54:38 +02:00
parent dccf79dc55
commit 7fc4e2f807

View file

@ -8,6 +8,7 @@ const {promisify} = require('util');
const currify = require('currify');
const squad = require('squad');
const tryToCatch = require('try-to-catch');
const wraptile = require('wraptile');
const config = require(DIR_SERVER + 'config');
@ -18,6 +19,12 @@ const exitPort = two(exit, 'cloudcmd --port: %s');
const bind = (f, self) => f.bind(self);
const promisifySelf = squad(promisify, bind);
const shutdown = wraptile(async (promises) => {
console.log('closing cloudcmd...');
await Promise.all(promises);
process.exit(0);
});
const opn = require('opn');
const express = require('express');
const io = require('socket.io');
@ -43,21 +50,28 @@ module.exports = async (options) => {
if (prefix)
app.get('/', (req, res) => res.redirect(prefix + '/'));
const socketServer = io(server, {
path: `${prefix}/socket.io`,
});
app.use(prefix, cloudcmd({
config: options,
socket: io(server, {
path: `${prefix}/socket.io`,
}),
socket: socketServer,
}));
if (port < 0 || port > 65535)
return exitPort('port number could be 1..65535, 0 means any available port');
const listen = promisifySelf(server.listen, server);
const closeServer = promisifySelf(server.close, server);
const closeSocket = promisifySelf(socketServer.close, socketServer);
server.on('error', exitPort);
await listen(port, ip);
const close = shutdown([closeServer, closeSocket]);
process.on('SIGINT', close);
const host = config('ip') || 'localhost';
const port0 = port || server.address().port;
const url = `http://${host}:${port0}${prefix}/`;