UNPKG

node-red-contrib-motechat

Version:

ultranet topic and payload communication

64 lines (57 loc) 2.45 kB
module.exports = function(RED) { "use strict" let sender = { send: require('../lib/mcClient.js').send } let getDDN = require('../lib/mcClient.js').getDDN let debug = require('../lib/mcClient.js').debug let isReg = require('../lib/mcClient.js').isRegist function send(config) { RED.nodes.createNode(this, config) let node = this node.name = config.name node.on('input', (msg, send, done) => { let { t1, t2 } = msg send = send || function() { node.send.apply(node, arguments) } let DDN = RED.util.evaluateNodeProperty(config.DDN, config.DDNType, node, msg) DDN = Array.isArray(DDN) ? DDN : [DDN] DDN = DDN.filter(item => item) let topic = RED.util.evaluateNodeProperty(config.topic, config.topicType, node, msg) let tarList = DDN let length = tarList.length if (isReg()){ tarList.forEach((target, index) => { sender.send(topic, target, { t1, t2 }, msg.payload).then(reply => { let newMsg = Object.assign(msg, { hostDDN: getDDN(), name: node.name, payload: reply, topic: topic, subject: node.subject }) send([newMsg, null]) }).catch(err => send([null, err])) if (length == index && done) done() }) if(!tarList.length) { sender.send(topic, '', { t1, t2 }, msg.payload).then(reply => { let newMsg = Object.assign(msg, { hostDDN: getDDN(), name: node.name, payload: reply, topic: topic, subject: node.subject }) send([newMsg, null]) }).catch(err => send([null, err])) if(done) done() } } else{ send([null, "Motechat hasn't registered!"]) debug("Motechat hasn't registered!") } }) } RED.nodes.registerType("send", send) }