diff --git a/packages/node_modules/@node-red/nodes/core/common/60-link.html b/packages/node_modules/@node-red/nodes/core/common/60-link.html
index 8f65ad935..05fa8b429 100644
--- a/packages/node_modules/@node-red/nodes/core/common/60-link.html
+++ b/packages/node_modules/@node-red/nodes/core/common/60-link.html
@@ -28,6 +28,10 @@
+
+
+
+
@@ -240,7 +244,8 @@
color:"#ddd",//"#87D8CF",
defaults: {
name: {value:""},
- links: { value: [], type:"link in[]"}
+ links: { value: [], type:"link in[]"},
+ timeout: { value: "30", validate:RED.validators.number(true) }
},
inputs: 1,
outputs: 1,
diff --git a/packages/node_modules/@node-red/nodes/core/common/60-link.js b/packages/node_modules/@node-red/nodes/core/common/60-link.js
index d5eda733f..53404e446 100644
--- a/packages/node_modules/@node-red/nodes/core/common/60-link.js
+++ b/packages/node_modules/@node-red/nodes/core/common/60-link.js
@@ -76,6 +76,10 @@ module.exports = function(RED) {
const node = this;
const target = n.links[0];
const messageEvents = {};
+ let timeout = parseFloat(n.timeout || "30")*1000;
+ if (isNaN(timeout)) {
+ timeout = 30000;
+ }
this.on("input", function(msg, send, done) {
msg._linkSource = msg._linkSource || [];
@@ -83,7 +87,14 @@ module.exports = function(RED) {
id: crypto.randomBytes(14).toString('hex'),
node: node.id,
}
- messageEvents[messageEvent.id] = { send, done };
+ messageEvents[messageEvent.id] = {
+ msg: RED.util.cloneMessage(msg),
+ send,
+ done,
+ ts: setTimeout(function() {
+ timeoutMessage(messageEvent.id)
+ }, timeout )
+ };
msg._linkSource.push(messageEvent);
var targetNode = RED.nodes.getNode(target);
if (targetNode) {
@@ -97,6 +108,7 @@ module.exports = function(RED) {
}
const messageEvent = messageEvents[eventId];
if (messageEvent) {
+ clearTimeout(messageEvent.ts);
delete messageEvents[eventId];
messageEvent.send(msg);
messageEvent.done();
@@ -104,6 +116,15 @@ module.exports = function(RED) {
node.send(msg);
}
}
+
+ function timeoutMessage(eventId) {
+ const messageEvent = messageEvents[eventId];
+ if (messageEvent) {
+ delete messageEvents[eventId];
+ node.error("timeout",messageEvent.msg);
+ }
+ }
+
}
RED.nodes.registerType("link call",LinkCallNode);