node-red-contrib-motechat
Version:
ultranet topic and payload communication
51 lines (45 loc) • 1.67 kB
JavaScript
module.exports = function(RED) {
"use strict"
let ini = true;
let { setEvent, removeEvent, sendEvent } = require('../lib/mcClient.js')
function flowOnEvent(config) {
RED.nodes.createNode(this, config)
let node = this
node.name = config.name
sendEvent('checkEvent', true);
let callback = msg => node.send({...msg })
let defaultEventName = config.event
if (defaultEventName === 'status') {
setEvent('status', callback)
}
if (defaultEventName === 'message') {
setEvent('message', callback)
}
node.on('input', async (msg, send, done) => {
await new Promise(resolve => setTimeout(resolve, 50));
send = send || function() { node.send.apply(node, arguments) }
send(msg)
if (done) done()
})
node.on('close', (removed, done) => {
sendEvent('checkEvent', false);
removeEvent(defaultEventName, callback)
done()
})
}
RED.nodes.registerType("onEvent", flowOnEvent)
function flowReEvent(config) {
RED.nodes.createNode(this, config)
let node = this
//let { ErrCode, ErrMsg } = config
node.on('input', (msg, send, done) => {
send = send || function() { node.send.apply(node, arguments) }
if (!msg.mcBack) return
if (typeof msg.mcBack !== 'function') return
//msg.mcBack({ ErrCode, ErrMsg, data: msg.payload })
msg.mcBack(msg.payload)
if (done) done()
})
}
RED.nodes.registerType("retEvent", flowReEvent)
}