* msg_network.js: Management of message network modules (start/stop/etc.)

* Minor updates to ES6 in some areas
* Better bbs.js startup seq
* Better iterator support for loadModulesForCategory()
* Start work on loading message network modules & tieing in record() (WIP)
* FTN PacketHeader is now a ES6 class
* Various FTN utils, e.g. Via line creation
This commit is contained in:
Bryan Ashby 2016-02-16 22:11:55 -07:00
parent 13d5c4d8f4
commit 74f5342997
10 changed files with 388 additions and 96 deletions

View file

@ -5,36 +5,37 @@
//SegfaultHandler.registerHandler('enigma-bbs-segfault.log');
// ENiGMA½
var conf = require('./config.js');
var logger = require('./logger.js');
var miscUtil = require('./misc_util.js');
var database = require('./database.js');
var clientConns = require('./client_connections.js');
let conf = require('./config.js');
let logger = require('./logger.js');
let miscUtil = require('./misc_util.js');
let database = require('./database.js');
let clientConns = require('./client_connections.js');
var paths = require('path');
var async = require('async');
var util = require('util');
var _ = require('lodash');
var assert = require('assert');
var mkdirp = require('mkdirp');
let paths = require('path');
let async = require('async');
let util = require('util');
let _ = require('lodash');
let assert = require('assert');
let mkdirp = require('mkdirp');
exports.bbsMain = bbsMain;
// our main entry point
exports.bbsMain = bbsMain;
function bbsMain() {
async.waterfall(
[
function processArgs(callback) {
const args = parseArgs();
const args = process.argv.slice(2);
var configPath;
if(args.indexOf('--help') > 0) {
// :TODO: display help
} else {
var argCount = args.length;
for(var i = 0; i < argCount; ++i) {
var arg = args[i];
if('--config' == arg) {
let argCount = args.length;
for(let i = 0; i < argCount; ++i) {
const arg = args[i];
if('--config' === arg) {
configPath = args[i + 1];
}
}
@ -70,25 +71,19 @@ function bbsMain() {
}
callback(err);
});
},
function listenConnections(callback) {
startListening(callback);
}
],
function complete(err) {
if(!err) {
startListening();
if(err) {
logger.log.error(err);
}
}
);
}
function parseArgs() {
var args = [];
process.argv.slice(2).forEach(function(val, index, array) {
args.push(val);
});
return args;
}
function initialize(cb) {
async.series(
[
@ -171,6 +166,9 @@ function initialize(cb) {
});
}
});
},
function readyMessageNetworkSupport(callback) {
require('./msg_network.js').startup(callback);
}
],
function onComplete(err) {
@ -179,29 +177,30 @@ function initialize(cb) {
);
}
function startListening() {
function startListening(cb) {
if(!conf.config.servers) {
// :TODO: Log error ... output to stderr as well. We can do it all with the logger
logger.log.error('No servers configured');
return [];
//logger.log.error('No servers configured');
cb(new Error('No servers configured'));
return;
}
var moduleUtil = require('./module_util.js'); // late load so we get Config
let moduleUtil = require('./module_util.js'); // late load so we get Config
moduleUtil.loadModulesForCategory('servers', function onServerModule(err, module) {
moduleUtil.loadModulesForCategory('servers', (err, module) => {
if(err) {
logger.log.info(err);
return;
}
var port = parseInt(module.runtime.config.port);
const port = parseInt(module.runtime.config.port);
if(isNaN(port)) {
logger.log.error( { port : module.runtime.config.port, server : module.moduleInfo.name }, 'Cannot load server (Invalid port)');
return;
}
var moduleInst = new module.getModule();
var server = moduleInst.createServer();
const moduleInst = new module.getModule();
const server = moduleInst.createServer();
// :TODO: handle maxConnections, e.g. conf.maxConnections
@ -262,7 +261,11 @@ function startListening() {
});
server.listen(port);
logger.log.info({ server : module.moduleInfo.name, port : port }, 'Listening for connections');
logger.log.info(
{ server : module.moduleInfo.name, port : port }, 'Listening for connections');
}, err => {
cb(err);
});
}