2016-10-25 03:49:45 +00:00
|
|
|
/* jslint node: true */
|
|
|
|
'use strict';
|
|
|
|
|
2018-06-23 03:26:46 +00:00
|
|
|
// ENiGMA½
|
2022-06-05 20:04:25 +00:00
|
|
|
const logger = require('./logger.js');
|
2016-10-25 03:49:45 +00:00
|
|
|
|
2018-06-23 03:26:46 +00:00
|
|
|
// deps
|
2022-06-05 20:04:25 +00:00
|
|
|
const async = require('async');
|
2022-12-31 05:35:18 +00:00
|
|
|
const isFunction = require('lodash/isFunction');
|
2016-10-25 03:49:45 +00:00
|
|
|
|
2022-06-05 20:04:25 +00:00
|
|
|
const listeningServers = {}; // packageName -> info
|
2016-10-25 03:49:45 +00:00
|
|
|
|
2022-06-05 20:04:25 +00:00
|
|
|
exports.startup = startup;
|
|
|
|
exports.shutdown = shutdown;
|
|
|
|
exports.getServer = getServer;
|
2016-10-25 03:49:45 +00:00
|
|
|
|
|
|
|
function startup(cb) {
|
2018-06-22 05:15:04 +00:00
|
|
|
return startListening(cb);
|
2016-10-25 03:49:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function shutdown(cb) {
|
2018-06-22 05:15:04 +00:00
|
|
|
return cb(null);
|
2016-10-25 03:49:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function getServer(packageName) {
|
2018-06-22 05:15:04 +00:00
|
|
|
return listeningServers[packageName];
|
2016-10-25 03:49:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function startListening(cb) {
|
2018-06-23 03:26:46 +00:00
|
|
|
const moduleUtil = require('./module_util.js'); // late load so we get Config
|
2022-12-31 22:30:54 +00:00
|
|
|
const cats = moduleUtil.moduleCategories;
|
2016-10-25 03:49:45 +00:00
|
|
|
|
2022-06-05 20:04:25 +00:00
|
|
|
async.each(
|
2022-12-31 22:30:54 +00:00
|
|
|
[cats.Login, cats.Content, cats.Chat],
|
2022-06-05 20:04:25 +00:00
|
|
|
(category, next) => {
|
|
|
|
moduleUtil.loadModulesForCategory(
|
|
|
|
`${category}Servers`,
|
|
|
|
(module, nextModule) => {
|
|
|
|
const moduleInst = new module.getModule();
|
|
|
|
try {
|
2022-12-31 05:35:18 +00:00
|
|
|
async.series(
|
|
|
|
[
|
|
|
|
callback => {
|
|
|
|
return moduleInst.createServer(callback);
|
|
|
|
},
|
|
|
|
callback => {
|
|
|
|
listeningServers[module.moduleInfo.packageName] = {
|
|
|
|
instance: moduleInst,
|
|
|
|
info: module.moduleInfo,
|
|
|
|
};
|
2022-06-05 20:04:25 +00:00
|
|
|
|
2022-12-31 05:35:18 +00:00
|
|
|
if (!isFunction(moduleInst.beforeListen)) {
|
|
|
|
return callback(null);
|
|
|
|
}
|
|
|
|
moduleInst.beforeListen(err => {
|
|
|
|
return callback(err);
|
|
|
|
});
|
|
|
|
},
|
|
|
|
callback => {
|
|
|
|
return moduleInst.listen(callback);
|
|
|
|
},
|
|
|
|
callback => {
|
|
|
|
if (!isFunction(moduleInst.afterListen)) {
|
|
|
|
return callback(null);
|
|
|
|
}
|
|
|
|
moduleInst.afterListen(err => {
|
|
|
|
return callback(err);
|
|
|
|
});
|
|
|
|
},
|
|
|
|
],
|
|
|
|
err => {
|
2022-06-05 20:04:25 +00:00
|
|
|
if (err) {
|
2022-12-31 05:35:18 +00:00
|
|
|
delete listeningServers[
|
|
|
|
module.moduleInfo.packageName
|
|
|
|
];
|
2022-06-05 20:04:25 +00:00
|
|
|
return nextModule(err);
|
|
|
|
}
|
2018-12-27 09:19:26 +00:00
|
|
|
|
2022-06-05 20:04:25 +00:00
|
|
|
return nextModule(null);
|
2022-12-31 05:35:18 +00:00
|
|
|
}
|
|
|
|
);
|
2022-06-05 20:04:25 +00:00
|
|
|
} catch (e) {
|
|
|
|
logger.log.error(e, 'Exception caught creating server!');
|
|
|
|
return nextModule(e);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
err => {
|
|
|
|
return next(err);
|
|
|
|
}
|
|
|
|
);
|
|
|
|
},
|
|
|
|
err => {
|
|
|
|
return cb(err);
|
|
|
|
}
|
|
|
|
);
|
2016-10-25 03:49:45 +00:00
|
|
|
}
|