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 = []; -} -