Newer
Older
smartKitchenMiniProgram / utils / mqtt / wxMqtt.js
dutingting on 22 Nov 2022 1 KB 1.0.1
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();