65 lines
1.3 KiB
JavaScript
65 lines
1.3 KiB
JavaScript
|
/* jslint node: true */
|
||
|
'use strict';
|
||
|
|
||
|
// ENiGMA½
|
||
|
const logger = require('./logger.js');
|
||
|
|
||
|
// deps
|
||
|
const async = require('async');
|
||
|
|
||
|
const listeningServers = {}; // packageName -> info
|
||
|
|
||
|
exports.startup = startup;
|
||
|
exports.shutdown = shutdown;
|
||
|
exports.getServer = getServer;
|
||
|
|
||
|
function startup(cb) {
|
||
|
return startListening(cb);
|
||
|
}
|
||
|
|
||
|
function shutdown(cb) {
|
||
|
return cb(null);
|
||
|
}
|
||
|
|
||
|
function getServer(packageName) {
|
||
|
return listeningServers[packageName];
|
||
|
}
|
||
|
|
||
|
function startListening(cb) {
|
||
|
const moduleUtil = require('./module_util.js'); // late load so we get Config
|
||
|
|
||
|
async.each( [ 'login', 'content' ], (category, next) => {
|
||
|
moduleUtil.loadModulesForCategory(`${category}Servers`, (err, module) => {
|
||
|
// :TODO: use enig error here!
|
||
|
if(err) {
|
||
|
if('EENIGMODDISABLED' === err.code) {
|
||
|
logger.log.debug(err.message);
|
||
|
} else {
|
||
|
logger.log.info( { err : err }, 'Failed loading module');
|
||
|
}
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
const moduleInst = new module.getModule();
|
||
|
try {
|
||
|
moduleInst.createServer();
|
||
|
if(!moduleInst.listen()) {
|
||
|
throw new Error('Failed listening');
|
||
|
}
|
||
|
|
||
|
listeningServers[module.moduleInfo.packageName] = {
|
||
|
instance : moduleInst,
|
||
|
info : module.moduleInfo,
|
||
|
};
|
||
|
|
||
|
} catch(e) {
|
||
|
logger.log.error(e, 'Exception caught creating server!');
|
||
|
}
|
||
|
}, err => {
|
||
|
return next(err);
|
||
|
});
|
||
|
}, err => {
|
||
|
return cb(err);
|
||
|
});
|
||
|
}
|