1
0
mirror of https://github.com/node-red/node-red.git synced 2023-10-10 13:36:53 +02:00

Merge pull request #3966 from Steve-Mcl/fix-mqtt-single-subscription

fix single subscription mqtt node status
This commit is contained in:
Nick O'Leary 2022-12-03 22:47:42 +00:00 committed by GitHub
commit 4bb2b91ee6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -366,6 +366,16 @@ module.exports = function(RED) {
} }
} }
function updateStatus(node, allNodes) {
let setStatus = setStatusDisconnected
if(node.connecting) {
setStatus = setStatusConnecting
} else if(node.connected) {
setStatus = setStatusConnected
}
setStatus(node, allNodes)
}
function setStatusDisconnected(node, allNodes) { function setStatusDisconnected(node, allNodes) {
if(allNodes) { if(allNodes) {
for (var id in node.users) { for (var id in node.users) {
@ -697,13 +707,17 @@ module.exports = function(RED) {
if (Object.keys(node.users).length === 1) { if (Object.keys(node.users).length === 1) {
if(node.autoConnect) { if(node.autoConnect) {
node.connect(); node.connect();
//update nodes status
setTimeout(function() {
updateStatus(node, true)
}, 1)
} }
} }
}; };
node.deregister = function(mqttNode,done) { node.deregister = function(mqttNode, done, autoDisconnect) {
delete node.users[mqttNode.id]; delete node.users[mqttNode.id];
if (!node.closing && node.connected && Object.keys(node.users).length === 0) { if (autoDisconnect && !node.closing && node.connected && Object.keys(node.users).length === 0) {
node.disconnect(); node.disconnect();
} }
done(); done();
@ -1220,7 +1234,7 @@ module.exports = function(RED) {
} else { } else {
node.brokerConn.unsubscribe(node.topic,node.id, removed); node.brokerConn.unsubscribe(node.topic,node.id, removed);
} }
node.brokerConn.deregister(node, done); node.brokerConn.deregister(node, done, removed);
node.brokerConn = null; node.brokerConn = null;
} else { } else {
done(); done();
@ -1283,9 +1297,9 @@ module.exports = function(RED) {
node.status({fill:"green",shape:"dot",text:"node-red:common.status.connected"}); node.status({fill:"green",shape:"dot",text:"node-red:common.status.connected"});
} }
node.brokerConn.register(node); node.brokerConn.register(node);
node.on('close', function(done) { node.on('close', function(removed, done) {
if (node.brokerConn) { if (node.brokerConn) {
node.brokerConn.deregister(node,done); node.brokerConn.deregister(node, done, removed)
node.brokerConn = null; node.brokerConn = null;
} else { } else {
done(); done();