+ Concept of PluginModule and inherited classes such as ServerModule, MenuModule, ...

* Client now tracks current menu module. Auto detach events, etc.
This commit is contained in:
Bryan Ashby 2015-03-18 23:08:23 -06:00
parent d3e35d286a
commit f7462bbbdd
11 changed files with 226 additions and 60 deletions

View file

@ -2,12 +2,15 @@
'use strict';
var stream = require('stream');
var term = require('./client_term.js');
var assert = require('assert');
var term = require('./client_term.js');
var miscUtil = require('./misc_util.js');
var ansi = require('./ansi_term.js');
var logger = require('./logger.js');
var logger = require('./logger.js'); // :TODO: cleanup and just use Log.
var Log = require('./logger.js').log;
var user = require('./user.js');
var moduleUtil = require('./module_util.js');
exports.Client = Client;
@ -183,6 +186,33 @@ Client.prototype.address = function() {
return this.input.address();
};
Client.prototype.gotoMenuModule = function(name, cb) {
var self = this;
// Assign a default missing module handler callback if none was provided
cb = miscUtil.valueWithDefault(cb, self.defaultHandlerMissingMod());
if(self.currentMenuModule) {
self.currentMenuModule.leave();
}
moduleUtil.loadModule(name, 'mods', function onModuleLoaded(err, mod) {
if(err) {
cb(err);
} else {
try {
Log.debug({ moduleName : name }, 'Goto menu module');
var modInst = new mod.getModule();
modInst.enter(self);
self.currentMenuModule = modInst;
} catch(e) {
cb(e);
}
}
});
};
///////////////////////////////////////////////////////////////////////////////
// Default error handlers
///////////////////////////////////////////////////////////////////////////////