From 6814f26a6238f769664eb67dd3395f62632b234f Mon Sep 17 00:00:00 2001 From: bvmensvoort Date: Sun, 11 Jun 2023 10:45:13 +0200 Subject: [PATCH] (de)Register consumer nodes at config node In order for error messages to be catchable --- src/matrix-create-room.js | 5 +++++ src/matrix-delete-event.js | 5 +++++ src/matrix-invite-room.js | 5 +++++ src/matrix-join-room.js | 5 +++++ src/matrix-leave-room.js | 5 +++++ src/matrix-react.js | 5 +++++ src/matrix-receive.js | 5 +++++ src/matrix-room-ban.js | 5 +++++ src/matrix-room-invite.js | 5 +++++ src/matrix-room-kick.js | 5 +++++ src/matrix-room-users.js | 5 +++++ src/matrix-send-file.js | 5 +++++ src/matrix-send-image.js | 5 +++++ src/matrix-send-message.js | 5 +++++ src/matrix-server-config.js | 9 +++++++++ 15 files changed, 79 insertions(+) diff --git a/src/matrix-create-room.js b/src/matrix-create-room.js index c954a0e..d5b7320 100644 --- a/src/matrix-create-room.js +++ b/src/matrix-create-room.js @@ -11,6 +11,7 @@ module.exports = function(RED) { node.error('Server must be configured on the node.', {}); return; } + node.server.register(node); this.encodeUri = function(pathTemplate, variables) { for (const key in variables) { @@ -64,6 +65,10 @@ module.exports = function(RED) { node.send([null, msg]); }); }); + + node.on("close", function() { + node.server.deregister(node); + }); } RED.nodes.registerType("matrix-create-room", MatrixCreateRoom); } \ No newline at end of file diff --git a/src/matrix-delete-event.js b/src/matrix-delete-event.js index 66b6afd..187eae3 100644 --- a/src/matrix-delete-event.js +++ b/src/matrix-delete-event.js @@ -13,6 +13,7 @@ module.exports = function(RED) { node.warn("No configuration node"); return; } + node.server.register(node); node.status({ fill: "red", shape: "ring", text: "disconnected" }); @@ -70,6 +71,10 @@ module.exports = function(RED) { node.send([null, msg]); }); }); + + node.on("close", function() { + node.server.deregister(node); + }); } RED.nodes.registerType("matrix-delete-event",MatrixDeleteEvent); } diff --git a/src/matrix-invite-room.js b/src/matrix-invite-room.js index e1c5553..dcf0689 100644 --- a/src/matrix-invite-room.js +++ b/src/matrix-invite-room.js @@ -12,6 +12,7 @@ module.exports = function(RED) { node.error('Server must be configured on the node.', {}); return; } + node.server.register(node); this.encodeUri = function(pathTemplate, variables) { for (const key in variables) { @@ -64,6 +65,10 @@ module.exports = function(RED) { node.send([null, msg]); }); }); + + node.on("close", function() { + node.server.deregister(node); + }); } RED.nodes.registerType("matrix-invite-room", MatrixInviteRoom); } \ No newline at end of file diff --git a/src/matrix-join-room.js b/src/matrix-join-room.js index 0c4c4ba..438a7af 100644 --- a/src/matrix-join-room.js +++ b/src/matrix-join-room.js @@ -11,6 +11,7 @@ module.exports = function(RED) { node.warn("No configuration node"); return; } + node.server.register(node); node.status({ fill: "red", shape: "ring", text: "disconnected" }); @@ -51,6 +52,10 @@ module.exports = function(RED) { node.send([null, msg]); }); }); + + node.on("close", function() { + node.server.deregister(node); + }); } RED.nodes.registerType("matrix-join-room", MatrixJoinRoom); } \ No newline at end of file diff --git a/src/matrix-leave-room.js b/src/matrix-leave-room.js index ee5da62..02d04a2 100644 --- a/src/matrix-leave-room.js +++ b/src/matrix-leave-room.js @@ -14,6 +14,7 @@ module.exports = function(RED) { node.error("No configuration node", {}); return; } + node.server.register(node); node.server.on("disconnected", function(){ node.status({ fill: "red", shape: "ring", text: "disconnected" }); @@ -49,6 +50,10 @@ module.exports = function(RED) { node.send([null, msg]); } }); + + node.on("close", function() { + node.server.deregister(node); + }); } RED.nodes.registerType("matrix-leave-room", MatrixLeaveRoom); } \ No newline at end of file diff --git a/src/matrix-react.js b/src/matrix-react.js index 26ca4cc..398da7f 100644 --- a/src/matrix-react.js +++ b/src/matrix-react.js @@ -13,6 +13,7 @@ module.exports = function(RED) { node.warn("No configuration node"); return; } + node.server.register(node); node.status({ fill: "red", shape: "ring", text: "disconnected" }); @@ -75,6 +76,10 @@ module.exports = function(RED) { node.send([null, msg]); }); }); + + node.on("close", function() { + node.server.deregister(node); + }); } RED.nodes.registerType("matrix-react", MatrixReact); } \ No newline at end of file diff --git a/src/matrix-receive.js b/src/matrix-receive.js index 404a32f..cb8102c 100644 --- a/src/matrix-receive.js +++ b/src/matrix-receive.js @@ -24,6 +24,7 @@ module.exports = function(RED) { node.error("No configuration node", {}); return; } + node.server.register(node); node.server.on("disconnected", function(){ node.status({ fill: "red", shape: "ring", text: "disconnected" }); @@ -149,6 +150,10 @@ module.exports = function(RED) { node.send(msg); }); + + node.on("close", function() { + node.server.deregister(node); + }); } RED.nodes.registerType("matrix-receive", MatrixReceiveMessage); } \ No newline at end of file diff --git a/src/matrix-room-ban.js b/src/matrix-room-ban.js index 6d6a71e..0b3e0e5 100644 --- a/src/matrix-room-ban.js +++ b/src/matrix-room-ban.js @@ -13,6 +13,7 @@ module.exports = function(RED) { node.warn("No configuration node"); return; } + node.server.register(node); node.status({ fill: "red", shape: "ring", text: "disconnected" }); @@ -58,6 +59,10 @@ module.exports = function(RED) { node.send([null, msg]); }); }); + + node.on("close", function() { + node.server.deregister(node); + }); } RED.nodes.registerType("matrix-room-ban", MatrixBan); } \ No newline at end of file diff --git a/src/matrix-room-invite.js b/src/matrix-room-invite.js index 1492538..1dbbfae 100644 --- a/src/matrix-room-invite.js +++ b/src/matrix-room-invite.js @@ -12,6 +12,7 @@ module.exports = function(RED) { node.error('Server must be configured on the node.', {}); return; } + node.server.register(node); node.status({ fill: "red", shape: "ring", text: "disconnected" }); @@ -26,6 +27,10 @@ module.exports = function(RED) { node.server.on("Room.invite", async function(msg) { node.send(msg); }); + + node.on("close", function() { + node.server.deregister(node); + }); } RED.nodes.registerType("matrix-room-invite", MatrixRoomInvite); } \ No newline at end of file diff --git a/src/matrix-room-kick.js b/src/matrix-room-kick.js index 13007ca..f93befe 100644 --- a/src/matrix-room-kick.js +++ b/src/matrix-room-kick.js @@ -13,6 +13,7 @@ module.exports = function(RED) { node.warn("No configuration node"); return; } + node.server.register(node); node.status({ fill: "red", shape: "ring", text: "disconnected" }); @@ -58,6 +59,10 @@ module.exports = function(RED) { node.send([null, msg]); }); }); + + node.on("close", function() { + node.server.deregister(node); + }); } RED.nodes.registerType("matrix-room-kick", MatrixKick); } \ No newline at end of file diff --git a/src/matrix-room-users.js b/src/matrix-room-users.js index 07eb34f..7df3c02 100644 --- a/src/matrix-room-users.js +++ b/src/matrix-room-users.js @@ -13,6 +13,7 @@ module.exports = function(RED) { node.warn("No configuration node"); return; } + node.server.register(node); node.status({ fill: "red", shape: "ring", text: "disconnected" }); @@ -65,6 +66,10 @@ module.exports = function(RED) { node.send([null, msg]); }); }); + + node.on("close", function() { + node.server.deregister(node); + }); } RED.nodes.registerType("matrix-room-users", MatrixRoomUsers); } \ No newline at end of file diff --git a/src/matrix-send-file.js b/src/matrix-send-file.js index 923f40c..ffac909 100644 --- a/src/matrix-send-file.js +++ b/src/matrix-send-file.js @@ -13,6 +13,7 @@ module.exports = function(RED) { node.warn("No configuration node"); return; } + node.server.register(node); node.status({ fill: "red", shape: "ring", text: "disconnected" }); @@ -94,6 +95,10 @@ module.exports = function(RED) { node.send([null, msg]); }); }); + + node.on("close", function() { + node.server.deregister(node); + }); } RED.nodes.registerType("matrix-send-file", MatrixSendFile); } \ No newline at end of file diff --git a/src/matrix-send-image.js b/src/matrix-send-image.js index 6035310..b309db6 100644 --- a/src/matrix-send-image.js +++ b/src/matrix-send-image.js @@ -13,6 +13,7 @@ module.exports = function(RED) { node.warn("No configuration node"); return; } + node.server.register(node); node.status({ fill: "red", shape: "ring", text: "disconnected" }); @@ -98,6 +99,10 @@ module.exports = function(RED) { node.send([null, msg]); }); }); + + node.on("close", function() { + node.server.deregister(node); + }); } RED.nodes.registerType("matrix-send-image", MatrixSendImage); } \ No newline at end of file diff --git a/src/matrix-send-message.js b/src/matrix-send-message.js index 79494a7..6819f92 100644 --- a/src/matrix-send-message.js +++ b/src/matrix-send-message.js @@ -54,6 +54,7 @@ module.exports = function(RED) { node.warn("No configuration node"); return; } + node.server.register(node); node.status({ fill: "red", shape: "ring", text: "disconnected" }); @@ -152,6 +153,10 @@ module.exports = function(RED) { node.send([null, msg]); }); }); + + node.on("close", function() { + node.server.deregister(node); + }); } RED.nodes.registerType("matrix-send-message", MatrixSendImage); } \ No newline at end of file diff --git a/src/matrix-server-config.js b/src/matrix-server-config.js index 59d0cf9..b2efab9 100644 --- a/src/matrix-server-config.js +++ b/src/matrix-server-config.js @@ -44,6 +44,7 @@ module.exports = function(RED) { this.credentials = {}; } + this.users = {}; this.connected = null; this.name = n.name; this.userId = this.credentials.userId; @@ -423,6 +424,14 @@ module.exports = function(RED) { } ) })(); + + // Keep track of all consumers of this node to be able to catch errors + node.register = function(consumerNode) { + node.users[consumerNode.id] = consumerNode; + }; + node.deregister = function(consumerNode) { + delete node.users[consumerNode.id]; + }; } }