diff --git a/nodes/core/core/89-delay.html b/nodes/core/core/89-delay.html index 5102c3a16..08e4abec0 100644 --- a/nodes/core/core/89-delay.html +++ b/nodes/core/core/89-delay.html @@ -39,14 +39,16 @@
- - + + +
+
@@ -90,7 +92,8 @@ rateUnits: {value: "second"}, randomFirst: {value:"1", required:true, validate:RED.validators.number()}, randomLast: {value:"5", required:true, validate:RED.validators.number()}, - randomUnits: {value: "seconds"} + randomUnits: {value: "seconds"}, + drop: {value:false} }, inputs:1, // set the number of inputs - only 0 or 1 outputs:1, // set the number of outputs - 0 to n diff --git a/nodes/core/core/89-delay.js b/nodes/core/core/89-delay.js index 8b7caa0b8..d8ef4fe2f 100644 --- a/nodes/core/core/89-delay.js +++ b/nodes/core/core/89-delay.js @@ -80,6 +80,7 @@ function DelayNode(n) { this.buffer = []; this.intervalID = -1; this.randomID = -1; + this.lastSent = Date.now(); var node = this; if (this.pauseType === "delay") { @@ -101,23 +102,31 @@ function DelayNode(n) { } else if (this.pauseType === "rate") { this.on("input", function(msg) { - if ( node.intervalID !== -1) { - node.buffer.push(msg); - if (node.buffer.length > 1000) { - node.warn(this.name + " buffer exceeded 1000 messages"); + if (node.drop) { + if ( node.intervalID !== -1) { + node.buffer.push(msg); + if (node.buffer.length > 1000) { + node.warn(this.name + " buffer exceeded 1000 messages"); + } + } else { + node.send(msg); + node.intervalID = setInterval(function() { + if (node.buffer.length === 0) { + clearInterval(node.intervalID); + node.intervalID = -1; + } + + if (node.buffer.length > 0) { + node.send(node.buffer.shift()); + } + },node.rate); } } else { - node.send(msg); - node.intervalID = setInterval(function() { - if (node.buffer.length === 0) { - clearInterval(node.intervalID); - node.intervalID = -1; - } - - if (node.buffer.length > 0) { - node.send(node.buffer.shift()); - } - },node.rate); + var now = Date.now(); + if (now-node.lastSent > node.rate) { + node.lastSent = now; + node.send(msg); + } } });