initial
This commit is contained in:
60
dist/mqttclient.js
vendored
Normal file
60
dist/mqttclient.js
vendored
Normal file
@ -0,0 +1,60 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const Mqtt = require("mqtt");
|
||||
const log = require("./log");
|
||||
const MQTT_BROKER_DEFAULT_URL = "mqtt://localhost";
|
||||
class MqttClient {
|
||||
constructor(mqttBrokerUrl) {
|
||||
this._mqttBrokerUrl = (mqttBrokerUrl) ? mqttBrokerUrl : MQTT_BROKER_DEFAULT_URL;
|
||||
this._topicHandlers = [];
|
||||
}
|
||||
register(topic, callback) {
|
||||
this._topicHandlers.push({ topic, callback });
|
||||
log.info(`handler registered 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}`);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
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
|
Reference in New Issue
Block a user