Removing bound events #101
authorDarren <darren@darrenwhitlen.com>
Sun, 28 Oct 2012 00:41:00 +0000 (01:41 +0100)
committerDarren <darren@darrenwhitlen.com>
Sun, 28 Oct 2012 00:41:00 +0000 (01:41 +0100)
server/client.js
server/irc/commands.js
server/irc/connection.js
server/kiwi.js

index 764d600ece700e61b7a5729f8b9b84e4e6e528c7..a49e5b18c857c37558a101b40e8e55bfec5a68dd 100755 (executable)
@@ -57,6 +57,11 @@ Client.prototype.sendKiwiCommand = function (command, data, callback) {
     this.websocket.emit('kiwi', c, callback);
 };
 
+Client.prototype.dispose = function () {
+    websocketDisconnect.apply(this);
+    this.removeAllListeners();
+};
+
 function handleClientMessage(msg, callback) {
     var server, args, obj, channels, keys;
 
@@ -128,7 +133,7 @@ function kiwiCommand(command, callback) {
                default:
                        callback();
     }
-};
+}
 
 
 // Websocket has disconnected, so quit all the IRC connections
@@ -136,14 +141,15 @@ function websocketDisconnect() {
     _.each(this.irc_connections, function (irc_connection, i, cons) {
         if (irc_connection) {
             irc_connection.end('QUIT :' + (config.get().quit_message || ''));
+            irc_connection.dispose();
             cons[i] = null;
         }
     });
     this.emit('destroy');
-};
+}
 
 
 // TODO: Should this close all the websocket connections too?
 function websocketError() {
     this.emit('destroy');
-};
+}
\ No newline at end of file
index a78b3d49e76e6d08b1da5079c0b3740c3afdeeb7..6e71edffab3112d10e4028614b74d28fb49a4700 100644 (file)
@@ -63,6 +63,10 @@ IrcCommands.prototype.bindEvents = function () {
     });
 };
 
+IrcCommands.prototype.dispose = function () {
+    this.removeAllListeners();
+};
+
 
 
 var listeners = {
index 2ba7c163c4f54c41d7ba72ef09cb1e52efd4a2c2..9e069deb65bcfaf21cbece37420d7b923557222a 100644 (file)
@@ -58,6 +58,11 @@ IrcConnection.prototype.end = function (data, callback) {
     end.call(this, data + '\r\n', 'utf-8', callback);
 };
 
+IrcConnection.prototype.dispose = function () {
+    this.removeAllListeners();
+};
+
+
 var write = function (data, encoding, callback) {
     this.socket.write(data, encoding, callback);
 };
index 87e83d799b524b4aaf6626cbb92d3c67f3502472..134894aeab38162faf9b6421a4bda562a56fba21 100755 (executable)
@@ -42,7 +42,12 @@ _.each(config.get().servers, function (server) {
     });
     wl.on('destroy', function (client) {
         clients = _.reject(clients, function (c) {
-            return client === c;
+            if (client === c) {
+                c.dispose();
+                return true;
+            }
+
+            return false;
         });
     });
 });