Files
yunkong2.sonoff/test/lib/mqttClient.js
2019-01-16 09:07:10 +08:00

95 lines
2.9 KiB
JavaScript

'use strict';
const mqtt = require('mqtt');
function Client(cbConnected, cbChanged, config) {
let that = this;
if (typeof config === 'string') config = {name: config};
config = config || {};
config.url = config.url || 'localhost';
this.client = mqtt.connect('mqtt://' + (config.user ? (config.user + ':' + config.pass + '@') : '') + config.url + (config.name ? '?clientId=' + config.name : ''), config);
this.client.on('connect', () => {
console.log((new Date()) + ' test client connected to localhost');
/*that.client.publish('mqtt/0/test', 'Roger1');
client.publish('test/out/testMessage1', 'Roger1');
client.publish('test/out/testMessage2', 'Roger2');
client.publish('test/in/testMessage3', 'Roger3');
client.publish('test/in/testMessage4', 'Roger4');*/
/*client.publish('arduino/kitchen/out/temperature', '10.1');
client.publish('arduino/kitchen/out/humidity', '56');
// Current light state
client.publish('arduino/kitchen/in/lightActor', 'false');
client.subscribe('arduino/kitchen/in/#');*/
//client.subscribe('arduino/kitchen/in/updateInterval');
that.client.subscribe('#');
if (cbConnected) cbConnected(true);
});
this.client.on('message', (topic, message, packet) => {
// message is Buffer
if (cbChanged) {
cbChanged(topic, message, packet);
} else {
console.log('Test MQTT Client received "' + topic + '": ' + message.toString());
}
});
this.client.on('close', err => {
if (err) console.error('Connection closed: ' + err);
// message is Buffer
if (cbConnected) {
cbConnected(false);
} else {
console.log('Test MQTT Client closed');
}
});
this.client.on('error', error => {
console.error('Test MQTT Client error: ' + error);
});
this.publish = (topic, message, qos, retain, cb) => {
if (typeof qos === 'function') {
cb = qos;
qos = undefined;
}
if (typeof retain === 'function') {
cb = retain;
retain = undefined;
}
const opts = {
retain: retain || false,
qos: qos || 0
};
that.client.publish(topic, message, opts, cb);
};
this.subscribe = (topic, opts, cb) => {
if (typeof opts === 'function') {
cb = opts;
opts = null;
}
that.client.subscribe(topic, opts, cb);
};
this.unsubscribe = (topic, cb) => {
that.client.unsubscribe(topic, cb);
};
this.destroy = () => {
if (that.client) {
that.client.end();
that.client = null;
}
};
this.stop = this.destroy;
return this;
}
if (typeof module !== 'undefined' && module.parent) {
module.exports = Client;
} else {
new Client();
}