Moving index.html out of the assets folder - the page is not an asset of itself
[KiwiIRC.git] / server / modules.js
index aed7743ffd91710e718f0f2fb14a46449cb2c815..08f17f5a5f76891376c157960fbca9fd5cbcddd4 100644 (file)
@@ -1,6 +1,7 @@
 var events = require('events'),
     util = require('util'),
-    _ = require('lodash');
+    _ = require('lodash'),
+    EventPublisher = require('./plugininterface.js');
 
 
 /**
@@ -14,9 +15,7 @@ var active_publisher;
 
 // 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();
 }
 
@@ -36,15 +35,16 @@ function registerPublisher (obj) {
  */
 
 // 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;
@@ -56,12 +56,18 @@ function loadModule (module_file) {
 
 // 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;
 }
 
 
@@ -74,12 +80,13 @@ function unloadModule (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
@@ -90,7 +97,7 @@ Module.prototype.on = function (event_name, fn) {
     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);
     }
 };
@@ -126,7 +133,7 @@ Module.prototype.off = function (event_name, fn) {
         }
     }
 
-    active_publisher.removeListener(event_name, fn);
+    active_publisher.off(event_name, fn);
 };