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");
}
}