From 020eaef5baf82340388eda6692982f169579d4c3 Mon Sep 17 00:00:00 2001 From: Stephen McLaughlin <44235289+Steve-Mcl@users.noreply.github.com> Date: Tue, 26 Apr 2022 16:12:54 +0100 Subject: [PATCH] Fix incorrect MQTT status fixes #3550 --- .../@node-red/nodes/core/network/10-mqtt.js | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/packages/node_modules/@node-red/nodes/core/network/10-mqtt.js b/packages/node_modules/@node-red/nodes/core/network/10-mqtt.js index 1ea5445ce..a026fdc29 100644 --- a/packages/node_modules/@node-red/nodes/core/network/10-mqtt.js +++ b/packages/node_modules/@node-red/nodes/core/network/10-mqtt.js @@ -362,7 +362,7 @@ module.exports = function(RED) { node.brokerConn.connect(function () { done(); }); - }) + }, true) } else { // Without force flag, we will refuse to cycle an active connection done(new Error(RED._('mqtt.errors.invalid-action-alreadyconnected'))); @@ -750,32 +750,35 @@ module.exports = function(RED) { } } }; - node.disconnect = function (callback) { - const _callback = function (resetNodeConnectedState) { + node.disconnect = function (callback, force) { + const _callback = function (resetNodeConnectedState, _force) { setStatusDisconnected(node, true); - if(resetNodeConnectedState) { + if(resetNodeConnectedState || _force) { + node.client.removeAllListeners(); node.closing = true; node.connecting = false; node.connected = false; } callback && typeof callback == "function" && callback(); }; - if(node.closing) { - return _callback(false); + return _callback(false, force); } var endCallBack = function endCallBack() { } if(node.connected && node.closeMessage) { node.publish(node.closeMessage, function (err) { node.client.end(endCallBack); - _callback(true); + _callback(true, force); }); } else if(node.connected) { node.client.end(endCallBack); - _callback(true); + _callback(true, force); + } else if(node.connecting) { + node.client.end(); + _callback(true, true); } else { - _callback(false); + _callback(false, force); } } node.subscriptionIds = {};