diff --git a/nodes/core/89-delay.html b/nodes/core/89-delay.html
index 413de3d33..7d8892f8c 100644
--- a/nodes/core/89-delay.html
+++ b/nodes/core/89-delay.html
@@ -16,21 +16,36 @@
@@ -40,16 +55,42 @@
color:"#E6E0F8",
defaults: { // defines the editable properties of the node
name: {value:""}, // along with default values.
- timeout: {value:"5", required:true, validate:RED.validators.number()}
+ pauseType: {value:"delay", required:true},
+ timeout: {value:"5", required:true, validate:RED.validators.number()},
+ rate: {value:"1", required:true, validate:RED.validators.number()}
},
inputs:1, // set the number of inputs - only 0 or 1
outputs:1, // set the number of outputs - 0 to n
icon: "arrow-in.png", // set the icon (held in public/icons)
label: function() { // sets the default label contents
- return this.name||"delay "+this.timeout+" s";
+ if (this.pauseType == "delay") {
+ return this.name||"delay "+this.timeout+" s";
+ } else if (this.pauseType == "rate") {
+ return this.name||"limit "+this.rate+" msg/s";
+ }
+ return "foo";
},
labelStyle: function() { // sets the class to apply to the label
return this.name?"node_label_italic":"";
+ },
+ oneditprepare: function() {
+ if (this.pauseType == "delay") {
+ $("#delay-details").show();
+ $("#rate-details").hide();
+ } else if (this.pauseType == "rate") {
+ $("#delay-details").hide();
+ $("#rate-details").show();
+ }
+
+ $("#node-input-pauseType").on("change",function() {
+ if (this.value == "delay") {
+ $("#delay-details").show();
+ $("#rate-details").hide();
+ } else if (this.value == "rate") {
+ $("#delay-details").hide();
+ $("#rate-details").show();
+ }
+ });
}
});
diff --git a/nodes/core/89-delay.js b/nodes/core/89-delay.js
index 1a3bfbd43..b4ec3fcbe 100644
--- a/nodes/core/89-delay.js
+++ b/nodes/core/89-delay.js
@@ -23,27 +23,53 @@ var RED = require("../../red/red");
function DelayNode(n) {
RED.nodes.createNode(this,n);
+ this.pauseType = n.pauseType;
this.timeout = n.timeout * 1000;
+ this.rate = 1000/n.rate;
this.name = n.name;
this.idList = [];
+ this.buffer = [];
+ var node= this;
- this.on("input", function(msg) {
- var node= this;
- var id;
- id = setTimeout(function(){
- node.idList.splice(node.idList.indexOf(id),1);
- node.send(msg);
- }, node.timeout);
- this.idList.push(id);
- });
+ if (this.pauseType == "delay") {
+ this.on("input", function(msg) {
+ var node= this;
+ var id;
+ id = setTimeout(function(){
+ node.idList.splice(node.idList.indexOf(id),1);
+ node.send(msg);
+ }, node.timeout);
+ this.idList.push(id);
+ });
+ } else if (this.pauseType == "rate") {
+
+ this.intervalID = setInterval(function() {
+ if (node.buffer.length > 0) {
+ node.send(node.buffer.shift());
+ }
+ },this.rate);
+
+ this.on("input", function(msg) {
+ this.buffer.push(msg);
+ if (this.buffer.length > 1000) {
+ this.warn(this.name + " buffer exceeded 1000 messages");
+ }
+ });
+ }
}
// register node
RED.nodes.registerType("delay",DelayNode);
DelayNode.prototype.close = function() {
- for (var i=0; i
-
-
-
-
-
-
-
-
-
diff --git a/nodes/core/89-rate.js b/nodes/core/89-rate.js
deleted file mode 100644
index f34e8bd2c..000000000
--- a/nodes/core/89-rate.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * Copyright 2013 IBM Corp.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- **/
-
-// Simple node to introduce a pause into a flow
-
-// Require main module
-var RED = require("../../red/red");
-
-
-// main node definition
-function RateLimitNode(n) {
- RED.nodes.createNode(this,n);
- this.buffer = [];
- this.timeout = 1000/n.rate;
- this.name = n.name
-
- var node= this
-
- this.intervalID = setInterval(function() {
- if (node.buffer.length > 0) {
- node.send(node.buffer.shift());
- }
- },this.timeout);
-
- this.on("input", function(msg) {
- this.buffer.push(msg);
- if (this.buffer.length > 1000) {
- this.warn(this.name + " buffer exceeded 1000 messages");
- }
- });
-}
-
-// register node
-RED.nodes.registerType("rateLimit",RateLimitNode);
-
-RateLimitNode.prototype.close = function() {
- clearInterval(this.intervalID);
- this.buffer = [];
-}
-