var events = require('events'),
util = require('util'),
- _ = require('lodash');
+ _ = require('lodash'),
+ EventPublisher = require('./plugininterface.js');
/**
// Create a publisher to allow event subscribing
function Publisher (obj) {
- var EventPublisher = function modulePublisher() {};
- util.inherits(EventPublisher, events.EventEmitter);
-
+ var EventPublisher = require('./plugininterface.js');
return new EventPublisher();
}
*/
// Hold the loaded modules
-var registered_modules = {};
+var registered_modules = [];
function loadModule (module_file) {
- var module;
+ var module,
+ full_module_filename = global.config.module_dir + module_file;
// Get an instance of the module and remove it from the cache
try {
- module = require(module_file);
- delete require.cache[require.resolve(module_file)];
+ module = require(full_module_filename);
+ delete require.cache[require.resolve(full_module_filename)];
} catch (err) {
// Module was not found
return false;
// Find a registered collection, .dispose() of it and remove it
function unloadModule (module) {
+ var found_module = false;
+
registered_modules = _.reject(registered_modules, function (registered_module) {
- if (module === registered_module) {
- module.dispose();
+ if (module.toLowerCase() === registered_module.module_name.toLowerCase()) {
+ found_module = true;
+
+ registered_module.dispose();
return true;
}
});
+
+ return found_module;
}
* To be created by modules to bind to server events
*/
function Module (module_name) {
- registered_modules[module_name] = this;
-}
+ registered_modules.push(this);
+ this.module_name = module_name;
+ // Holder for all the bound events by this module
+ this._events = {};
+}
-// Holder for all the bound events by this module
-Module.prototype._events = {};
// Keep track of this modules events and bind
this._events[event_name].push(fn);
// If this is an internal event, do not propogate the event
- if (internal_events.indexOf(event_name) !== -1) {
+ if (internal_events.indexOf(event_name) === -1) {
active_publisher.on(event_name, fn);
}
};
}
}
- active_publisher.removeListener(event_name, fn);
+ active_publisher.off(event_name, fn);
};