From f7a72a48ea80b7083c3c51cecd2b9e890fde48b8 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Thu, 20 Feb 2014 21:53:21 +0000 Subject: [PATCH] Improve socket error handling in MQTT client Fixes #155 --- nodes/core/io/lib/mqtt.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/nodes/core/io/lib/mqtt.js b/nodes/core/io/lib/mqtt.js index e91b9526c..50a8f3b4c 100644 --- a/nodes/core/io/lib/mqtt.js +++ b/nodes/core/io/lib/mqtt.js @@ -54,16 +54,20 @@ MQTTClient.prototype.connect = function(options) { self.client = mqtt.createConnection(this.port,this.host,function(err,client) { if (err) { + self.connected = false; + self.connectionError = true; self.emit('connectionlost',err); return; } client.on('close',function(e) { clearInterval(self.watchdog); - if (self.connected) { - self.connected = false; - self.emit('connectionlost',e); - } else { - self.emit('disconnect'); + if (!self.connectionError) { + if (self.connected) { + self.connected = false; + self.emit('connectionlost',e); + } else { + self.emit('disconnect'); + } } }); client.on('error',function(e) { @@ -96,6 +100,7 @@ MQTTClient.prototype.connect = function(options) { self.lastInbound = (new Date()).getTime() self.lastOutbound = (new Date()).getTime() self.connected = true; + self.connectionError = false; self.emit('connect'); } else { self.connected = false; @@ -161,6 +166,7 @@ MQTTClient.prototype.connect = function(options) { }); this.lastOutbound = (new Date()).getTime() + this.connectionError = false; client.connect(self.options); }); }