node-red-contrib-motechat
Version:
ultranet topic and payload communication
64 lines (57 loc) • 2.45 kB
JavaScript
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)
}