Control module fixes
[KiwiIRC.git] / server_modules / control.js
index 15c2bc471e17e066c8f927ac2b0bc546464bb608..bbe42544fab54d8f9df8766ebf5aaf3d11e3d13f 100644 (file)
@@ -10,7 +10,7 @@ var net         = require('net'),
     config      = require('../server/configuration.js'),\r
     _           = require('lodash');\r
 \r
-var module = new kiwiModules.Module('Control');\r
+var control_module = new kiwiModules.Module('Control');\r
 \r
 \r
 /**\r
@@ -18,6 +18,7 @@ var module = new kiwiModules.Module('Control');
  */\r
 function SocketClient (socket) {\r
     this.socket = socket;\r
+    this.socket_closing = false;\r
 \r
     this.remoteAddress = this.socket.remoteAddress;\r
     console.log('Control connection from ' + this.socket.remoteAddress + ' opened');\r
@@ -42,7 +43,8 @@ SocketClient.prototype.unbindEvents = function() {
 \r
 SocketClient.prototype.write = function(data, append) {\r
     if (typeof append === 'undefined') append = '\n';\r
-    this.socket.write(data + append);\r
+    if (this.socket && !this.socket_closing)\r
+        this.socket.write(data + append);\r
 };\r
 SocketClient.prototype.displayPrompt = function(prompt) {\r
     prompt = prompt || 'Kiwi > ';\r
@@ -76,6 +78,7 @@ SocketClient.prototype.onData = function(data) {
 \r
 SocketClient.prototype.onClose = function() {\r
     this.unbindEvents();\r
+    this.socket = null;\r
     console.log('Control connection from ' + this.remoteAddress + ' closed');\r
 };\r
 \r
@@ -95,11 +98,13 @@ var socket_commands = {
                 }\r
 \r
                 if (!kiwiModules.unload(data[1])) {\r
-                    this.write('Module ' + (data[1] || '') + ' was not found');\r
+                    this.write('Module ' + (data[1] || '') + ' is not loaded');\r
                     return;\r
                 }\r
 \r
-                kiwiModules.load(data[1]);\r
+                if (!kiwiModules.load(data[1])) {\r
+                    this.write('Error loading module ' + (data[1] || ''));\r
+                }\r
                 this.write('Module ' + data[1] + ' reloaded');\r
 \r
                 break;\r
@@ -107,7 +112,11 @@ var socket_commands = {
             case 'list':\r
             case 'ls':\r
             default:\r
-                this.write('Loaded modules: ' + Object.keys(kiwiModules.getRegisteredModules()).join(', '));\r
+                var module_names = [];\r
+                kiwiModules.getRegisteredModules().forEach(function(module) {\r
+                    module_names.push(module.module_name);\r
+                });\r
+                this.write('Loaded modules: ' + module_names.join(', '));\r
         }\r
 \r
     },\r
@@ -132,9 +141,11 @@ var socket_commands = {
 \r
     quit: function(data) {\r
         this.socket.destroy();\r
+        this.socket_closing = true;\r
     },\r
     exit: function(data) {\r
         this.socket.destroy();\r
+        this.socket_closing = true;\r
     }\r
 };\r
 \r
@@ -146,3 +157,7 @@ var server = net.createServer(function (socket) {
     new SocketClient(socket);\r
 });\r
 server.listen(8888);\r
+\r
+control_module.on('dispose', function() {\r
+    server.close();\r
+});\r