Aggiunto nodo debounce

master
Pietro Brenna 2020-02-20 11:47:45 +01:00
parent 869b8b357b
commit 99840b7ac2
3 changed files with 62 additions and 1 deletions

33
my-debounce.html 100644
View File

@ -0,0 +1,33 @@
<script type="text/html" data-template-name="my-debounce">
<div class="form-row">
<label for="node-input-delay"><i class="fa fa-wrench"></i> Delay</label>
<input type="text" id="node-input-delay">
</div>
<div class="form-row">
<label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="node-red:common.label.name"></span></label>
<input type="text" id="node-input-name" data-i18n="[placeholder]node-red:common.label.name">
</div>
</script>
<script type="text/html" data-help-name="my-debounce">
<p>Deduplica messaggi per valore del payload entro <code>delay</code>.</p>
</script>
<script type="text/javascript">
RED.nodes.registerType('my-debounce',{
category: 'function',
color: "#E6E0F8",
defaults: {
delay: { value: 1000, required: true, validate: RED.validators.number() },
name: { value: "" }
},
inputs: 1,
outputs: 1,
icon: "timer.png",
label: function() {
return this.name || "my-debounce";
}
});
</script>

27
my-debounce.js 100644
View File

@ -0,0 +1,27 @@
module.exports = function (RED) {
"use strict";
function XMPPServerNode(n) {
RED.nodes.createNode(this, n);
this.delay_msec = n.delay;
//this.by_value = n.by_value;
this.recv = new Map();
this.on("input", msg => {
let msg_json = JSON.stringify(msg.payload);
let now = new Date();
for (let [key, val] of this.recv) {
if ((now.getTime() - val.getTime()) > this.delay_msec) {
this.recv.delete(key);
}
}
if (!this.recv.has(msg_json)) {
this.send(msg);
this.recv.set(msg_json, now);
}
});
}
RED.nodes.registerType("my-debounce", XMPPServerNode);
}

View File

@ -13,7 +13,8 @@
"keywords": [ "node-red", "xmpp" ], "keywords": [ "node-red", "xmpp" ],
"node-red" : { "node-red" : {
"nodes" : { "nodes" : {
"xmpp": "92-xmpp.js" "xmpp": "92-xmpp.js",
"my-debounce": "my-debounce.js"
} }
}, },
"author": { "author": {