"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const Mqtt = require("mqtt"); const log = require("./log"); const MQTT_BROKER_DEFAULT_URL = "mqtt://localhost"; function passThrough(message) { return message; } exports.passThrough = passThrough; class MqttClient { constructor(mqttBrokerUrl) { this._mqttBrokerUrl = (mqttBrokerUrl) ? mqttBrokerUrl : MQTT_BROKER_DEFAULT_URL; this._topicHandlers = []; } register(topic, callback) { let done = false; let callbackName = (callback.name === "") ? "lambda" : callback.name; for (let topicHandler of this._topicHandlers) { if (topicHandler.topic === topic) { topicHandler.callbacks.push(callback); done = true; log.info(`additional callback <${callbackName}> added for topic ${topic}`); } } if (!done) { let cbs = [callback]; this._topicHandlers.push({ topic: topic, callbacks: cbs }); log.info(`first callback <${callbackName}> added for topic ${topic}`); } } exec() { this._mqttClient = Mqtt.connect(this._mqttBrokerUrl); this._mqttClient.on('error', log.error); this._mqttClient.on('connect', () => { log.info("connected to mqtt broker"); for (let topicHandler of this._topicHandlers) { this._mqttClient.subscribe(topicHandler.topic); } }); this._mqttClient.on('message', (topic, payload) => { log.info(`message received, topic ${topic}, payload ${payload}`); for (let topicHandler of this._topicHandlers) { if (this.topicMatch(topicHandler.topic, topic)) { log.info(`received topic ${topic} matches registered topic ${topicHandler.topic}`); // topicHandler.callback(payload) } } }); } topicMatch(registeredTopic, receivedTopic) { let registeredTopicFields = registeredTopic.split('/'); let receivedTopicFields = receivedTopic.split('/'); for (let field in registeredTopicFields) { let regField = registeredTopicFields[field]; let recvField = receivedTopicFields[field]; log.info(`recv: ${recvField}, reg: ${regField}`); if (regField === "#") { log.info('true'); return true; } if (regField != recvField && regField != "+") { log.info('false'); return false; } } if (registeredTopicFields.length == receivedTopicFields.length) { log.info('true'); return true; } else { log.info('false'); return false; } } } exports.MqttClient = MqttClient; //# sourceMappingURL=mqttclient.js.map