import mqtt_module from 'mqtt' const Mqtt = function (url) { this.mqtt = mqtt_module this.random = getGuid32; this.clientId = getGuid32(); let options = { clientId: this.clientId, username: 'test', password: 'test', connectTimeout: 100, keepalive: 100 } this.client = this.mqtt.connect("ws://" + url + "/mqtt", options) // 重连次数 超5次就算了 this.reconnectNum = 0 // 连接 this.link = function () { return new Promise((resolve, reject) => { this.client.on('connect', e => { console.log('-----------------------链接成功-----------------------') resolve(this.client) }) this.client.on('reconnect', error => { this.reconnectNum++ if (this.reconnectNum >= 10) this.client.end(true) console.log('正在重连:', error) }) this.client.on('error', error => { console.log('订阅失败', error) }) }) } this.subscribe = function (topic, options) { this.client.subscribe(topic, options, (err) => { if (!err) { console.log('-----------------------'+topic+'订阅成功-----------------------') } else { throw new Error(err) } }) } this.unsubscribe = function(topic, options) { this.client.unsubscribe(topic, options, (err) => { if (!err) { console.log('-----------------------'+topic+'取消订阅成功-----------------------') } else { throw new Error(err) } }) } this.publish = function (topic, sendMsg, options) { this.client.publish(topic, JSON.stringify(sendMsg), options, (err, a) => { if (!err) { console.log('-----------------------'+topic+'发送成功-----------------------') } else { throw new Error(err) } }) } this.message = function (callback) { this.client.on('message', (topic, message) => { let data = JSON.parse(message.toString()) callback(data, topic) }) } // 关闭 this.close = function () { this.client.end(true) } } export default Mqtt function getGuid32() { var rt_str = String.fromCharCode(65 + Math.floor(Math.random() * 26)); for (var i = 0; i < 31; ++i) { var num = Math.floor(Math.random() * (26 + 26 + 10)); var ch_str; if (num < 10) { ch_str = num.toString(); } else if (num < 10 + 26) { ch_str = String.fromCharCode(65 + num - 10); } else { ch_str = String.fromCharCode(97 + num - 10 - 26); } rt_str += ch_str; } return rt_str; }