mirror of
				https://github.com/node-red/node-red.git
				synced 2025-03-01 10:36:34 +00:00 
			
		
		
		
	Support nodeMessageBufferMaxLength in delay node
This commit is contained in:
		@@ -20,6 +20,20 @@ module.exports = function(RED) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    var MILLIS_TO_NANOS = 1000000;
 | 
					    var MILLIS_TO_NANOS = 1000000;
 | 
				
			||||||
    var SECONDS_TO_NANOS = 1000000000;
 | 
					    var SECONDS_TO_NANOS = 1000000000;
 | 
				
			||||||
 | 
					    var _maxKeptMsgsCount;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function maxKeptMsgsCount(node) {
 | 
				
			||||||
 | 
					        if (_maxKeptMsgsCount === undefined) {
 | 
				
			||||||
 | 
					            var name = "nodeMessageBufferMaxLength";
 | 
				
			||||||
 | 
					            if (RED.settings.hasOwnProperty(name)) {
 | 
				
			||||||
 | 
					                _maxKeptMsgsCount = RED.settings[name];
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else {
 | 
				
			||||||
 | 
					                _maxKeptMsgsCount = 0;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return _maxKeptMsgsCount;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function DelayNode(n) {
 | 
					    function DelayNode(n) {
 | 
				
			||||||
        RED.nodes.createNode(this,n);
 | 
					        RED.nodes.createNode(this,n);
 | 
				
			||||||
@@ -172,10 +186,16 @@ module.exports = function(RED) {
 | 
				
			|||||||
                            node.intervalID = setInterval(sendMsgFromBuffer, node.rate);
 | 
					                            node.intervalID = setInterval(sendMsgFromBuffer, node.rate);
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        if (!msg.hasOwnProperty("flush")) {
 | 
					                        if (!msg.hasOwnProperty("flush")) {
 | 
				
			||||||
 | 
					                            var max_msgs = maxKeptMsgsCount(node);
 | 
				
			||||||
 | 
					                            if ((max_msgs > 0) && (node.buffer.length >= max_msgs)) {
 | 
				
			||||||
 | 
					                                node.buffer = [];
 | 
				
			||||||
 | 
					                                node.error(RED._("delay.errors.too-many"), msg);
 | 
				
			||||||
 | 
					                            } else {
 | 
				
			||||||
                                node.buffer.push(msg);
 | 
					                                node.buffer.push(msg);
 | 
				
			||||||
                                node.reportDepth();
 | 
					                                node.reportDepth();
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                    else {
 | 
					                    else {
 | 
				
			||||||
                        if (msg.hasOwnProperty("rate")) {
 | 
					                        if (msg.hasOwnProperty("rate")) {
 | 
				
			||||||
                            node.rate = msg.rate;
 | 
					                            node.rate = msg.rate;
 | 
				
			||||||
@@ -186,6 +206,21 @@ module.exports = function(RED) {
 | 
				
			|||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                else {
 | 
					                else {
 | 
				
			||||||
 | 
					                    if (maxKeptMsgsCount(node) > 0) {
 | 
				
			||||||
 | 
					                        if (node.intervalID === -1) {
 | 
				
			||||||
 | 
					                            node.send(msg);
 | 
				
			||||||
 | 
					                            node.intervalID = setInterval(sendMsgFromBuffer, node.rate);
 | 
				
			||||||
 | 
					                        } else {
 | 
				
			||||||
 | 
					                            if (msg.hasOwnProperty("rate") && node.rate !== msg.rate) {
 | 
				
			||||||
 | 
					                                node.rate = msg.rate;
 | 
				
			||||||
 | 
					                                clearInterval(node.intervalID);
 | 
				
			||||||
 | 
					                                node.intervalID = setInterval(sendMsgFromBuffer, node.rate);
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                            if (node.buffer.length < _maxKeptMsgsCount) {
 | 
				
			||||||
 | 
					                                node.buffer.push(msg);
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    } else {
 | 
				
			||||||
                        if (msg.hasOwnProperty("rate")) {
 | 
					                        if (msg.hasOwnProperty("rate")) {
 | 
				
			||||||
                            node.rate = msg.rate;
 | 
					                            node.rate = msg.rate;
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
@@ -202,6 +237,7 @@ module.exports = function(RED) {
 | 
				
			|||||||
                            node.send(msg);
 | 
					                            node.send(msg);
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
                if (msg.hasOwnProperty("reset")) {
 | 
					                if (msg.hasOwnProperty("reset")) {
 | 
				
			||||||
                    clearInterval(node.intervalID);
 | 
					                    clearInterval(node.intervalID);
 | 
				
			||||||
                    node.intervalID = -1;
 | 
					                    node.intervalID = -1;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -280,6 +280,9 @@
 | 
				
			|||||||
                    "singular": "Day"
 | 
					                    "singular": "Day"
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        "errors": {
 | 
				
			||||||
 | 
					            "too-many" : "too many pending messages in delay node"
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "trigger": {
 | 
					    "trigger": {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -280,6 +280,9 @@
 | 
				
			|||||||
                    "singular": "日"
 | 
					                    "singular": "日"
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        "errors": {
 | 
				
			||||||
 | 
					            "too-many": "delayノード内で保持しているメッセージが多すぎます"
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "trigger": {
 | 
					    "trigger": {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user