UNPKG

prisme-flow

Version:

prisme platform flow engine

96 lines (84 loc) 2.32 kB
/** * Created by prisme.io on 09/06/2017. */ var RED = require(process.env.NODE_RED_HOME + '/red/red') var mosca = require('mosca') function MQTTInNode (n) { RED.nodes.createNode(this, n) this.dburl = n.dburl ? n.dburl.toString() : '' this.mqtt_port = parseInt(n.mqtt_port) this.mqtt_ws_port = parseInt(n.mqtt_ws_port) var moscaSettings = { interfaces: [] } if (this.mqtt_port) { moscaSettings.interfaces.push({type: 'mqtt', port: this.mqtt_port}) } if (this.mqtt_ws_port) { moscaSettings.interfaces.push({type: 'http', port: this.mqtt_ws_port}) } // TODO: read https://github.com/mcollina/mosca/blob/master/lib/server.js and add support of mqtts and wss var node = this node.log('Binding mosca mqtt server on port: ' + this.port) var server = new mosca.Server(moscaSettings, function (err) { if (err) { err.msg = 'Error binding mosca mqtt server, cause: ' + err.toString() node.error(err) } }) server.on('clientConnected', function (client) { var msg = { topic: 'clientConnected', payload: client } node.send(msg) }) server.on('clientDisconnected', function (client) { var msg = { topic: 'clientDisconnected', payload: client } node.send(msg) }) server.on('published', function (packet, client) { var msg = { topic: 'published', payload: { packet: packet, client: client } } node.send(msg) }) server.on('subscribed', function (topic, client) { var msg = { topic: 'subscribed', payload: { topic: topic, client: client } } node.send(msg) }) server.on('unsubscribed', function (topic, client) { var msg = { topic: 'unsubscribed', payload: { topic: topic, client: client } } node.send(msg) }) this.on('close', function () { node.log('Unbinding mosca mqtt server from port: ' + this.port) server.close() }) if (this.dburl) { var onPersistenceReady = function () { node.log('Persistence Ready') persistence.wire(server) } var persistenceOpts = { url: this.dburl } var persistence = mosca.persistence.Mongo(persistenceOpts, onPersistenceReady) } } RED.nodes.registerType('MQTTInNode', MQTTInNode)