From f1bcf130aa6259abb998561669a3ee5cdc500e83 Mon Sep 17 00:00:00 2001 From: Dave C-J Date: Mon, 7 Oct 2013 18:46:06 +0100 Subject: [PATCH] Fix for irc client - to make connection "lazy", so it doesn't start untill needed. --- nodes/social/91-irc.js | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/nodes/social/91-irc.js b/nodes/social/91-irc.js index acc7fc974..21456c32d 100644 --- a/nodes/social/91-irc.js +++ b/nodes/social/91-irc.js @@ -24,28 +24,29 @@ function IRCServerNode(n) { this.server = n.server; this.channel = n.channel; this.nickname = n.nickname; - this.ircclient = new irc.Client(this.server, this.nickname, { - channels: [this.channel] + this.ircclient = null; + this.on("close", function() { + if (this.ircclient != null) { + this.ircclient.disconnect(); + } }); - this.ircclient.addListener('error', function(message) { - util.log('[irc] '+ JSON.stringify(message)); - }); - this._close = function() { - this.ircclient.disconnect(); - } } RED.nodes.registerType("irc-server",IRCServerNode); -IRCServerNode.prototype.close = function() { - this._close(); -} - // The Input Node function IrcInNode(n) { RED.nodes.createNode(this,n); this.ircserver = n.ircserver; this.serverConfig = RED.nodes.getNode(this.ircserver); + if (this.serverConfig.ircclient == null) { + this.serverConfig.ircclient = new irc.Client(this.serverConfig.server, this.serverConfig.nickname, { + channels: [this.serverConfig.channel] + }); + this.serverConfig.ircclient.addListener('error', function(message) { + util.log('[irc] '+ JSON.stringify(message)); + }); + } this.ircclient = this.serverConfig.ircclient; var node = this; @@ -64,8 +65,16 @@ function IrcOutNode(n) { this.sendAll = n.sendObject; this.ircserver = n.ircserver; this.serverConfig = RED.nodes.getNode(this.ircserver); - this.ircclient = this.serverConfig.ircclient; this.channel = this.serverConfig.channel; + if (this.serverConfig.ircclient == null) { + this.serverConfig.ircclient = new irc.Client(this.serverConfig.server, this.serverConfig.nickname, { + channels: [this.serverConfig.channel] + }); + this.serverConfig.ircclient.addListener('error', function(message) { + util.log('[irc] '+ JSON.stringify(message)); + }); + } + this.ircclient = this.serverConfig.ircclient; var node = this; this.on("input", function(msg) {