UNPKG

node-red-contrib-motechat

Version:

ultranet topic and payload communication

51 lines (45 loc) 1.67 kB
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) }