var di = require('di'); var mqtt = require('mqtt'); var os = require("os"); /** * @constructor */ function DillerMqttClient(config, tx) { var log = config.log(); var mqttClient; var hostname = os.hostname(); function run(clientType, subscribeToLog) { if (mqttClient) { throw 'Already connected'; } var clientId = 'diller_' + clientType + '_' + hostname; log.info('Connecting to ' + config.mqttUrl + ' as ' + clientId); var cfg = { clientId: clientId }; mqttClient = mqtt.connect(config.mqttUrl, cfg); mqttClient.on('offline', function () { log.info('offline'); }); mqttClient.on('error', function (error) { log.info('error', {error: error}); }); mqttClient.on('connect', function () { log.info('Connected'); mqttClient.subscribe('/diller/#'); if (subscribeToLog) { mqttClient.subscribe('$SYS/broker/log/#'); } }); } /** * @lends DillerMqttClient.prototype */ return { run: run, on: function () { return mqttClient.on.apply(mqttClient, arguments); }, publish: function () { return mqttClient.publish.apply(mqttClient, arguments); } }; } var _DillerTx = require('../DillerTx'); var _DillerConfig = require('../DillerConfig'); di.annotate(DillerMqttClient, new di.Inject(_DillerConfig, _DillerTx)); module.exports = DillerMqttClient;