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);
+ }
}
});