import MqttLibs from './mqttLib'; import { getMqttconfig } from '../api/device-api' require('regenerator-runtime') let count = 0 class wxMqtt { constructor() {} async connectMqtt() { let res = await getMqttconfig(); if(!res) return false; let { client_id, password, source_topic: { device: topic }, url, username } = res || {}; if (url) { const mqttClient = MqttLibs.connect(url, { clientId: client_id, username, password, subscribeTopics: topic, reconnectPeriod: 0, keepalive: 60 }); this._mqttClient = mqttClient; MqttLibs.addMqttEventListener('close', errorMsg => { if (count < 5) { count++, this.connectMqtt(); } console.log('errorMsg: mqttClose', errorMsg); }); MqttLibs.addMqttEventListener('error', errorMsg => { if (count < 5) { count++, this.connectMqtt(); } console.log('errorMsg: mqttError', errorMsg); }); // return mqttClient } } // 添加封装后的监听事件 on(event, cb) { return MqttLibs.addMqttEventListener(event, cb); } off(event, cb) { return MqttLibs.removeMqttEventListener(event, cb) } reconnectMqtt() { this._mqttClient = undefined; this.connectMqtt() } destroyMqtt = async() => { console.log('正在销毁mqtt') if(this._mqttClient) { await MqttLibs.destroy(); // destroy 在小程序,解除network的监听,解除全部事件监听 this._mqttClient = undefined; return true; } } } export default new wxMqtt();