analyze static method
解析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));
}