analyze static method

MqttData? analyze({
  1. required String topic,
  2. required String payload,
})

解析mqtt的数据

Implementation

static MqttData? analyze({required String topic, required String payload}) {
  if (payload == "") {
    debugPrint("数据错误");
    return null;
  }
  payload = payload.toUpperCase();
  if (!payload.startsWith("EF55")) {
    debugPrint("无法识别的数据");
    return null;
  }
  int length = payload.length;
  if (length < 6) {
    debugPrint("解析数据长度异常");
    return null;
  }
  //判断校验位是否正确
  if (calculatedChecksum(payload.substring(0, length - 2)) !=
      payload.substring(length - 2)) {
    debugPrint("数据校验失败");
    return null;
  }

  List<String> topicInfos = topic.split("/");
  int position = 4;

  return MqttData(
      topic: topic,
      //保存主题
      receive: topicInfos.length > 9 ? topicInfos[5] : null,
      sender: topicInfos.length > 9 ? topicInfos[6] : topicInfos[5],
      createdTime: topicInfos.length > 9 ? topicInfos[7] : null,
      timeout: topicInfos.length > 9 ? topicInfos[8] : null,
      messageNumber: payload.substring(position, position = position + 32),
      secretKey: payload.substring(position, position = position + 32),
      messageType: MqttMessageType(
          type: payload.substring(position, position = position + 2)),
      dataLength: int.parse(
          payload.substring(position, position = position + 4),
          radix: 16),
      data: payload.substring(position, length - 2),
      checkCode: payload.substring(length - 2));
}