connect method

dynamic connect()

连接mqtt

Implementation

connect() async {
  try {
    WitsystemError connectInfo =
        await WitsystemNet.authPost("/mqtt/get_user_login_mqtt_cert", {});
    if (connectInfo.code != NetError.succesCode) {
      throw MqttException(
          code: connectInfo.code.toString(),
          message: NetError.error(int.parse(connectInfo.code)).error);
    }

    ///连接
    mqttClient = MqttServerClient.withPort(
        WitsystemConfig().mqtt, connectInfo.data["data"]["clientId"], 1886);
    mqttClient!.onDisconnected=_onDisconnected;
    mqttClient!.onConnected = _onConnected;
    mqttClient!.onSubscribed = _onSubscribed;
    mqttClient!.onSubscribeFail = _onSubscribeFail;
    mqttClient!.onUnsubscribed = _onUnSubscribed;
    mqttClient!.keepAlivePeriod = 60;
    mqttClient!.setProtocolV311();
    mqttClient!.autoReconnect = true;

    mqttClient!.logging(on: true);
    MqttClientConnectionStatus? connect = await mqttClient!.connect(
        connectInfo.data["data"]["username"],
        connectInfo.data["data"]["password"]);
    if (connect == null) {
      throw MqttException(
          code: NetError.unknown.code, message: NetError.unknown.error);
    }
    if (connect.returnCode == MqttConnectReturnCode.connectionAccepted) {
      _defaultSubscribed(connectInfo.data["data"]["clientId"]);
      mqttClient!.updates
          ?.listen((List<MqttReceivedMessage<MqttMessage>> data) {
        String topic = data[0].topic;
        final recMess = data[0].payload as MqttPublishMessage;
        final payload =const convert.Utf8Decoder().convert(recMess.payload.message);
        MqttData? mqttData =
            MqttTools.analyze(topic: topic, payload: payload);
        if (mqttData == null) return;
        mqttData.data = MqttTools.hexCharCodeToStr2(mqttData.data);

        debugPrint("解析好的数据${mqttData.data}");
        _notifyObserver(mqttData);
      });
      return true;
    }
    if (connect.returnCode == MqttConnectReturnCode.badUsernameOrPassword) {
      throw MqttException(
          code: NetError.unknown.code, message: S.current.mqttPasswordError);
    }
    throw MqttException(
        code: NetError.unknown.code, message: NetError.unknown.error);
  } catch (e) {
    debugPrint("$e");
  }
}