actionhero
Version:
actionhero.js is a multi-transport API Server with integrated cluster capabilities and delayed tasks
106 lines (91 loc) • 3.1 kB
JavaScript
;
var path = require('path');
var async = require('async');
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 jobs = [];
serverFolders.forEach(function(p){
api.utils.recursiveDirectoryGlob(p).forEach(function(f){
var parts = f.split(/[\/\\]+/);
var serverName = parts[(parts.length - 1)].split('.')[0];
if(api.config.servers[serverName] && api.config.servers[serverName].enabled === true){
var init = require(f).initialize;
var options = api.config.servers[serverName];
jobs.push(function(done){
init(api, options, function(serverObject){
api.servers.servers[serverName] = serverObject;
api.log(['Initialized server: %s', serverName], 'debug');
return done();
});
});
}
api.watchFileAndAct(f, function(){
api.log(['*** Rebooting due to server (%s) change ***', serverName], 'info');
api.commands.restart.call(api._self);
});
});
});
async.series(jobs, next);
},
start: function(api, next){
var jobs = [];
Object.keys(api.servers.servers).forEach(function(serverName){
var server = api.servers.servers[serverName];
if(server && server.options.enabled === true){
var message = '';
var messageArgs = [];
message += 'Starting server: `%s`';
messageArgs.push(serverName);
if(api.config.servers[serverName].bindIP){
message += ' @ %s';
messageArgs.push(api.config.servers[serverName].bindIP);
}
if(api.config.servers[serverName].port){
message += ':%s';
messageArgs.push(api.config.servers[serverName].port);
}
jobs.push(function(done){
api.log([message].concat(messageArgs), 'notice');
server.start(function(error){
if(error){ return done(error); }
api.log(['Server started: %s', serverName], 'debug');
return done();
});
});
}
});
async.series(jobs, next);
},
stop: function(api, next){
var jobs = [];
Object.keys(api.servers.servers).forEach(function(serverName){
var server = api.servers.servers[serverName];
if((server && server.options.enabled === true) || !server){
jobs.push(function(done){
api.log(['Stopping server: %s', serverName], 'notice');
server.stop(function(error){
if(error){ return done(error); }
api.log(['Server stopped: %s', serverName], 'debug');
return done();
});
});
}
});
async.series(jobs, next);
}
};