From 488a039781cbaee869ed9eca65c66f763a9c9c1b Mon Sep 17 00:00:00 2001 From: Nicholas O'Leary Date: Sun, 27 Oct 2013 17:57:46 +0000 Subject: [PATCH] Add err handler on tcpout/listener. Fixes #50 --- nodes/io/31-tcpout.js | 187 +++++++++++++++++++++--------------------- 1 file changed, 93 insertions(+), 94 deletions(-) diff --git a/nodes/io/31-tcpout.js b/nodes/io/31-tcpout.js index 1a626736b..a157c9f39 100644 --- a/nodes/io/31-tcpout.js +++ b/nodes/io/31-tcpout.js @@ -19,106 +19,105 @@ var reconnectTime = RED.settings.socketReconnectTime||10000; var net = require('net'); function TcpOut(n) { - RED.nodes.createNode(this,n); - this.host = n.host; - this.port = n.port * 1; - this.base64 = n.base64; - this.beserver = n.beserver; - this.name = n.name; - this.closing = false; - var node = this; + RED.nodes.createNode(this,n); + this.host = n.host; + this.port = n.port * 1; + this.base64 = n.base64; + this.beserver = n.beserver; + this.name = n.name; + this.closing = false; + var node = this; - if (!node.beserver||node.beserver=="client") { - var reconnectTimeout; - var client = null; - var connected = false; - - function setupTcpClient() { - node.log("connecting to "+node.host+":"+node.port); - client = net.connect(node.port, node.host, function() { - connected = true; - node.log("connected to "+node.host+":"+node.port); - }); - - client.on('error', function (err) { - node.log('error : '+err); - }); - - client.on('end', function (err) { - }); - - client.on('close', function() { - node.log("connection lost to "+node.host+":"+node.port); - connected = false; - client.destroy(); - if (!node.closing) { - reconnectTimeout = setTimeout(setupTcpClient,reconnectTime); - } - }); - } - setupTcpClient(); - - - node.on("input", function(msg) { - if (connected && msg.payload != null) { - if (Buffer.isBuffer(msg.payload)) { - client.write(msg.payload); - } else if (typeof msg.payload === "string" && node.base64) { - client.write(new Buffer(msg.payload,'base64')); - } else { - client.write(new Buffer(""+msg.payload)); - } - } - }); - - - this._close = function() { - this.closing = true; - client.end(); - clearTimeout(reconnectTimeout); - } - } - - else { - var connectedSockets = []; - var server = net.createServer(function (socket) { - var remoteDetails = socket.remoteAddress+":"+socket.remotePort; - node.log("connection from "+remoteDetails); - connectedSockets.push(socket); - socket.on('close',function() { - node.log("connection closed from "+remoteDetails); + if (!node.beserver||node.beserver=="client") { + var reconnectTimeout; + var client = null; + var connected = false; + + function setupTcpClient() { + node.log("connecting to "+node.host+":"+node.port); + client = net.connect(node.port, node.host, function() { + connected = true; + node.log("connected to "+node.host+":"+node.port); + }); + + client.on('error', function (err) { + node.log('error : '+err); + }); + + client.on('end', function (err) { + }); + + client.on('close', function() { + node.log("connection lost to "+node.host+":"+node.port); + connected = false; + client.destroy(); + if (!node.closing) { + reconnectTimeout = setTimeout(setupTcpClient,reconnectTime); + } + }); + } + setupTcpClient(); + + + node.on("input", function(msg) { + if (connected && msg.payload != null) { + if (Buffer.isBuffer(msg.payload)) { + client.write(msg.payload); + } else if (typeof msg.payload === "string" && node.base64) { + client.write(new Buffer(msg.payload,'base64')); + } else { + client.write(new Buffer(""+msg.payload)); + } + } + }); + + node.on("close", function() { + this.closing = true; + client.end(); + clearTimeout(reconnectTimeout); + }); + + } else { + var connectedSockets = []; + var server = net.createServer(function (socket) { + var remoteDetails = socket.remoteAddress+":"+socket.remotePort; + node.log("connection from "+remoteDetails); + connectedSockets.push(socket); + socket.on('close',function() { + node.log("connection closed from "+remoteDetails); + connectedSockets.splice(connectedSockets.indexOf(socket),1); + }); + socket.on('error',function() { + node.log("socket error from "+remoteDetails); connectedSockets.splice(connectedSockets.indexOf(socket),1); }); - }); - node.on("input", function(msg) { - if (msg.payload != null) { - var buffer; - if (Buffer.isBuffer(msg.payload)) { - buffer = msg.payload; - } else if (typeof msg.payload === "string" && node.base64) { - buffer = new Buffer(msg.payload,'base64'); - } else { - buffer = new Buffer(""+msg.payload); - } - for (var i = 0; i