UNPKG

actionhero

Version:

actionhero.js is a multi-transport API Server with integrated cluster capabilities and delayed tasks

100 lines (90 loc) 2.84 kB
var path = require('path'); module.exports = { startPriority: 900, stopPriority: 100, loadPriority: 599, initialize: function(api, next){ api.servers = {}; api.servers.servers = []; // Load the servers var serverFolders = [ path.resolve(__dirname + '/../servers') ]; api.config.general.paths.server.forEach(function(p){ p = path.resolve(p); if(serverFolders.indexOf(p) < 0){ serverFolders.push(p); } }) var inits = {} serverFolders.forEach(function(p){ api.utils.recursiveDirectoryGlob(p).forEach(function(f){ var parts = f.split(/[\/\\]+/) var server = parts[(parts.length - 1)].split('.')[0]; if(api.config.servers[server] && api.config.servers[server].enabled === true){ inits[server] = require(f)['initialize']; } api.watchFileAndAct(f, function(){ api.log('\r\n\r\n*** rebooting due to server ('+server+') change ***\r\n\r\n', 'info'); api.commands.restart.call(api._self); }); }); }) var started = 0; for(var server in inits){ started++; (function(server){ var options = api.config.servers[server]; inits[server](api, options, function(serverObject){ api.servers.servers[server] = serverObject; api.log('initialized server: ' + server, 'debug'); process.nextTick(function(){ started--; if(started === 0){ next() } }); }); })(server) } if(started === 0){ next() } }, start: function(api, next){ var started = 0; if(api.utils.hashLength(api.servers.servers) === 0){ next() } for(var server in api.servers.servers){ started++; if(api.config.servers[server] && api.config.servers[server].enabled === true){ api.log('starting server: ' + server, 'notice'); api.servers.servers[server].start(function(error){ if(error){ return next(error); } process.nextTick(function(){ started--; if(started === 0){ next() } }); }); }else{ process.nextTick(function(){ started--; if(started === 0){ next() } }); } } }, stop: function(api, next){ var started = 0; if(api.utils.hashLength(api.servers.servers) === 0){ next() } for(var server in api.servers.servers){ started++; (function(server){ api.log('stopping server: ' + server, 'notice'); api.servers.servers[server].stop(function(error){ if(error){ return next(error); } process.nextTick(function(){ api.log('server stopped: ' + server, 'debug'); started--; if(started === 0){ next() } }); }); })(server) } } }