initial
This commit is contained in:
57
dist/log.js
vendored
Normal file
57
dist/log.js
vendored
Normal file
@ -0,0 +1,57 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const chalk = require("chalk");
|
||||
const moment = require("moment");
|
||||
var Level;
|
||||
(function (Level) {
|
||||
Level[Level["All"] = 0] = "All";
|
||||
Level[Level["NoDebug"] = 1] = "NoDebug";
|
||||
Level[Level["NoDebugNoInfo"] = 2] = "NoDebugNoInfo";
|
||||
Level[Level["NoDebugNoInfoNoWarning"] = 3] = "NoDebugNoInfoNoWarning";
|
||||
})(Level || (Level = {}));
|
||||
var level = Level.NoDebug;
|
||||
function timestamp() {
|
||||
return moment().format('HH:mm:ss.SSS');
|
||||
}
|
||||
function setLevel(value) {
|
||||
switch (value) {
|
||||
case 'info':
|
||||
level = Level.NoDebug;
|
||||
break;
|
||||
case 'warn':
|
||||
level = Level.NoDebugNoInfo;
|
||||
break;
|
||||
case 'error':
|
||||
level = Level.NoDebugNoInfoNoWarning;
|
||||
break;
|
||||
default: level = Level.All;
|
||||
}
|
||||
}
|
||||
exports.setLevel = setLevel;
|
||||
function info(message) {
|
||||
if (level < Level.NoDebugNoInfo) {
|
||||
console.log(`${timestamp()} ${chalk.bold.cyan('[ II ]')} ${message}`);
|
||||
}
|
||||
}
|
||||
exports.info = info;
|
||||
function warn(message) {
|
||||
if (level < Level.NoDebugNoInfoNoWarning) {
|
||||
console.log(`${timestamp()} ${chalk.bold.yellow('[ WW ]')} ${message}`);
|
||||
}
|
||||
}
|
||||
exports.warn = warn;
|
||||
function error(message) {
|
||||
console.log(`${timestamp()} ${chalk.bold.red('[ EE ]')} ${message}`);
|
||||
}
|
||||
exports.error = error;
|
||||
function success(message) {
|
||||
console.log(`${timestamp()} ${chalk.bold.green('[ OK ]')} ${message}`);
|
||||
}
|
||||
exports.success = success;
|
||||
function debug(message) {
|
||||
if (level < Level.NoDebug) {
|
||||
console.log(`${timestamp()} ${chalk.bold.magenta('[ DB ]')} ${message}`);
|
||||
}
|
||||
}
|
||||
exports.debug = debug;
|
||||
//# sourceMappingURL=log.js.map
|
18
dist/main.js
vendored
Normal file
18
dist/main.js
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const log = require("./log");
|
||||
const MqttClient = require("./mqttclient");
|
||||
class Dispatcher {
|
||||
constructor() {
|
||||
this._mqttClient = new MqttClient.MqttClient();
|
||||
this._mqttClient.register('IoT/test', null);
|
||||
this._mqttClient.register('IoT/Device/#', null);
|
||||
}
|
||||
exec() {
|
||||
log.info("Dispatcher starting");
|
||||
this._mqttClient.exec();
|
||||
}
|
||||
}
|
||||
const dispatcher = new Dispatcher();
|
||||
dispatcher.exec();
|
||||
//# sourceMappingURL=main.js.map
|
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