@yhiot/utils
Version:
154 lines (138 loc) • 4.43 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.instance = exports.default = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _mqtt = _interopRequireDefault(require("mqtt"));
var _debug2 = _interopRequireDefault(require("debug"));
var debug = (0, _debug2.default)('app:mqttClient');
var DEFAULT_URL = 'mqtt://localhost';
var DEFAULT_TOPIC = 'server/#';
/**
* mqtt客户端
*/
var MqttClient = /*#__PURE__*/function () {
function MqttClient(opts) {
(0, _classCallCheck2.default)(this, MqttClient);
this.opts = opts;
this.eventConnect = this.eventConnect.bind(this);
this.eventMessage = this.eventMessage.bind(this);
this.eventReconnect = this.eventReconnect.bind(this);
this.eventClose = this.eventClose.bind(this);
this.eventOffline = this.eventOffline.bind(this);
this.eventError = this.eventError.bind(this);
this.eventEnd = this.eventEnd.bind(this);
this.eventPacketsend = this.eventPacketsend.bind(this);
this.eventPacketreceive = this.eventPacketreceive.bind(this);
this.setOpts = this.setOpts.bind(this);
this.start = this.start.bind(this);
this.publishJson = this.publishJson.bind(this);
this.end = this.end.bind(this);
}
(0, _createClass2.default)(MqttClient, [{
key: "setOpts",
value: function setOpts(opts) {
this.opts = opts;
}
}, {
key: "start",
value: function start() {
var url = this.opts.url || DEFAULT_URL;
debug('mqtt.connect to ' + url);
this.client = _mqtt.default.connect(url);
this.client.on('connect', this.eventConnect);
this.client.on('message', this.eventMessage);
this.client.on('reconnect', this.eventReconnect);
this.client.on('close', this.eventClose);
this.client.on('offline', this.eventOffline);
this.client.on('error', this.eventError);
this.client.on('end', this.eventEnd);
this.client.on('packetsend', this.eventPacketsend);
this.client.on('packetreceive', this.eventPacketreceive);
}
}, {
key: "eventConnect",
value: function eventConnect() {
var topic = this.opts.topic || DEFAULT_TOPIC;
if (topic) {
this.client.subscribe(topic, function (error) {
if (!error) {
debug('subscribe ok! topic=' + topic); // this.client.publish('/topic/test', 'Hello mqtt')
} else {
debug('subscribe fail!', error);
}
});
}
}
}, {
key: "eventMessage",
value: function eventMessage(topic, message) {
// message is Buffer
var strmsg = message.toString(); // debug('eventMessage', topic, strmsg)
// client.end()
if (this.opts.messageCallback) {
this.opts.messageCallback(topic, strmsg);
}
}
}, {
key: "eventReconnect",
value: function eventReconnect() {
debug('eventReconnect');
}
}, {
key: "eventClose",
value: function eventClose() {
debug('eventClose');
}
}, {
key: "eventOffline",
value: function eventOffline() {
debug('eventOffline');
}
}, {
key: "eventError",
value: function eventError(error) {
debug('eventError', error);
this.client.reconnect();
}
}, {
key: "eventEnd",
value: function eventEnd() {
debug('eventEnd');
} // eslint-disable-next-line
}, {
key: "eventPacketsend",
value: function eventPacketsend(packet) {// debug('eventPacketsend');
} // eslint-disable-next-line
}, {
key: "eventPacketreceive",
value: function eventPacketreceive(packet) {// debug('eventPacketreceive');
}
}, {
key: "publishJson",
value: function publishJson(topic, data) {
if (!this.client) {
debug('error! no mqtt client!');
return false;
}
this.client.publish(topic, JSON.stringify(data));
}
}, {
key: "end",
value: function end() {
if (!this.client) {
debug('warning! no mqtt client!');
return false;
}
this.client.end();
this.client = null;
}
}]);
return MqttClient;
}();
exports.default = MqttClient;
var instance = new MqttClient();
exports.instance = instance;