fix:增加序列化时判断是请求体还是响应体

This commit is contained in:
liyi 2024-12-06 15:13:03 +08:00
parent 298862d153
commit 13fefa0495
3 changed files with 151 additions and 37 deletions

View File

@ -246,7 +246,7 @@ class _StarLockLoginPageState extends State<StarLockLoginPage> {
btnName: '发送对讲请求', btnName: '发送对讲请求',
onClick: () { onClick: () {
StartChartManage().sendCallRequestMessage( StartChartManage().sendCallRequestMessage(
ToPeerId: '59wtMp6DTpBwrEViT9FQpBMZWnc6MEnLxGuP9eYB4JKt', ToPeerId: 'GCvA1LeqU1P9bUvxGEEfW41zBqBAiev3enWWuG6k2ekM',
); );
}, },
), ),

View File

@ -3,17 +3,22 @@ import 'package:crc32_checksum/crc32_checksum.dart';
import 'package:crypto/crypto.dart'; import 'package:crypto/crypto.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/app_settings/app_settings.dart'; import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/talk/startChart/constant/message_type_constant.dart';
import 'package:star_lock/talk/startChart/constant/payload_type_constant.dart'; import 'package:star_lock/talk/startChart/constant/payload_type_constant.dart';
import 'package:star_lock/talk/startChart/entity/heartbeat_response.dart'; import 'package:star_lock/talk/startChart/entity/heartbeat_response.dart';
import 'package:star_lock/talk/startChart/entity/login_response.dart'; import 'package:star_lock/talk/startChart/entity/login_response.dart';
import 'package:star_lock/talk/startChart/proto/ble_message.pb.dart'; import 'package:star_lock/talk/startChart/proto/ble_message.pb.dart';
import 'package:star_lock/talk/startChart/proto/gateway_reset.pb.dart'; import 'package:star_lock/talk/startChart/proto/gateway_reset.pb.dart';
import 'package:star_lock/talk/startChart/proto/gateway_transfer.pb.dart';
import 'package:star_lock/talk/startChart/proto/generic.pb.dart'; import 'package:star_lock/talk/startChart/proto/generic.pb.dart';
import 'package:star_lock/talk/startChart/proto/remote_unlock.pb.dart'; import 'package:star_lock/talk/startChart/proto/remote_unlock.pb.dart';
import 'package:star_lock/talk/startChart/proto/talk_accept.pbserver.dart';
import 'package:star_lock/talk/startChart/proto/talk_data.pb.dart'; import 'package:star_lock/talk/startChart/proto/talk_data.pb.dart';
import 'package:star_lock/talk/startChart/proto/talk_expect.pb.dart'; import 'package:star_lock/talk/startChart/proto/talk_expect.pb.dart';
import 'package:star_lock/talk/startChart/proto/talk_hangup.pb.dart'; import 'package:star_lock/talk/startChart/proto/talk_hangup.pb.dart';
import 'package:star_lock/talk/startChart/proto/talk_ping.pb.dart'; import 'package:star_lock/talk/startChart/proto/talk_ping.pb.dart';
import 'package:star_lock/talk/startChart/proto/talk_push.pbserver.dart';
import 'package:star_lock/talk/startChart/proto/talk_receiver_transfer.pb.dart';
import 'package:star_lock/talk/startChart/proto/talk_reject.pb.dart'; import 'package:star_lock/talk/startChart/proto/talk_reject.pb.dart';
import 'package:star_lock/talk/startChart/proto/talk_request.pb.dart'; import 'package:star_lock/talk/startChart/proto/talk_request.pb.dart';
@ -255,6 +260,7 @@ class ScpMessage {
offset += message.PayloadLength!; offset += message.PayloadLength!;
message.Payload = _handlePayLoad( message.Payload = _handlePayLoad(
payloadType: message.PayloadType ?? 0, payloadType: message.PayloadType ?? 0,
messageType: message.MessageType ?? 0,
byte: sublist, byte: sublist,
offset: offset, offset: offset,
PayloadLength: message.PayloadLength, PayloadLength: message.PayloadLength,
@ -283,6 +289,7 @@ class ScpMessage {
// payloadType序列化对应的payload结构体 // payloadType序列化对应的payload结构体
static dynamic _handlePayLoad({ static dynamic _handlePayLoad({
required int payloadType, required int payloadType,
required int messageType,
required List<int> byte, required List<int> byte,
int? offset, int? offset,
int? PayloadLength, int? PayloadLength,
@ -304,46 +311,145 @@ class ScpMessage {
return payload; return payload;
case PayloadTypeConstant.gatewayReset: case PayloadTypeConstant.gatewayReset:
// //
final GatewayResetResp gatewayResetResp = if (messageType == MessageTypeConstant.Resp) {
GatewayResetResp.fromBuffer(byte); final GatewayResetResp gatewayResetResp =
return gatewayResetResp; GatewayResetResp.fromBuffer(byte);
return gatewayResetResp;
} else if (messageType == MessageTypeConstant.Req) {
final GatewayResetReq gatewayResetReq =
GatewayResetReq.fromBuffer(byte);
return gatewayResetReq;
} else {
String payload = utf8.decode(byte);
return payload;
}
case PayloadTypeConstant.callRequest: case PayloadTypeConstant.callRequest:
final TalkReq talkReq = TalkReq.fromBuffer(byte); if (messageType == MessageTypeConstant.Resp) {
return talkReq; final GenericResp genericResp = GenericResp.fromBuffer(byte);
return genericResp;
} else if (messageType == MessageTypeConstant.Req) {
final TalkReq talkReq = TalkReq.fromBuffer(byte);
return talkReq;
} else {
String payload = utf8.decode(byte);
return payload;
}
case PayloadTypeConstant.talkAccept: case PayloadTypeConstant.talkAccept:
final GenericResp genericResp = GenericResp.fromBuffer(byte); if (messageType == MessageTypeConstant.Resp) {
return genericResp; final GenericResp genericResp = GenericResp.fromBuffer(byte);
return genericResp;
} else if (messageType == MessageTypeConstant.Req) {
final TalkAcceptReq talkAccept = TalkAcceptReq.fromBuffer(byte);
return talkAccept;
} else {
String payload = utf8.decode(byte);
return payload;
}
case PayloadTypeConstant.gatewayTransfer: case PayloadTypeConstant.gatewayTransfer:
final GenericResp genericResp = GenericResp.fromBuffer(byte); if (messageType == MessageTypeConstant.Resp) {
return genericResp; final GenericResp genericResp = GenericResp.fromBuffer(byte);
return genericResp;
} else if (messageType == MessageTypeConstant.Req) {
final GatewayTransferReq gatewayTransferReq =
GatewayTransferReq.fromBuffer(byte);
return gatewayTransferReq;
} else {
String payload = utf8.decode(byte);
return payload;
}
case PayloadTypeConstant.blePassthrough: case PayloadTypeConstant.blePassthrough:
final BleResp bleResp = BleResp.fromBuffer(byte); final BleResp bleResp = BleResp.fromBuffer(byte);
return bleResp; return bleResp;
case PayloadTypeConstant.remoteUnlock: case PayloadTypeConstant.remoteUnlock:
final RemoteUnlockResp remoteUnlockResp = if (messageType == MessageTypeConstant.Resp) {
RemoteUnlockResp.fromBuffer(byte); final GenericResp genericResp = GenericResp.fromBuffer(byte);
return remoteUnlockResp; return genericResp;
} else if (messageType == MessageTypeConstant.Req) {
final RemoteUnlockResp remoteUnlockResp =
RemoteUnlockResp.fromBuffer(byte);
return remoteUnlockResp;
} else {
String payload = utf8.decode(byte);
return payload;
}
case PayloadTypeConstant.talkReceiverTransfer: case PayloadTypeConstant.talkReceiverTransfer:
final GenericResp genericResp = GenericResp.fromBuffer(byte); if (messageType == MessageTypeConstant.Resp) {
return genericResp; final GenericResp genericResp = GenericResp.fromBuffer(byte);
return genericResp;
} else if (messageType == MessageTypeConstant.Req) {
final TalkReceiverTransfer talkReceiverTransfer =
TalkReceiverTransfer.fromBuffer(byte);
return talkReceiverTransfer;
} else {
String payload = utf8.decode(byte);
return payload;
}
case PayloadTypeConstant.talkPush: case PayloadTypeConstant.talkPush:
final GenericResp genericResp = GenericResp.fromBuffer(byte); if (messageType == MessageTypeConstant.Resp) {
return genericResp; final GenericResp genericResp = GenericResp.fromBuffer(byte);
return genericResp;
} else if (messageType == MessageTypeConstant.Req) {
final TalkPush talkPush = TalkPush.fromBuffer(byte);
return talkPush;
} else {
String payload = utf8.decode(byte);
return payload;
}
case PayloadTypeConstant.talkReject: case PayloadTypeConstant.talkReject:
final TalkReject talkReject = TalkReject.fromBuffer(byte); if (messageType == MessageTypeConstant.Resp) {
return talkReject; final GenericResp genericResp = GenericResp.fromBuffer(byte);
return genericResp;
} else if (messageType == MessageTypeConstant.Req) {
final TalkReject talkReject = TalkReject.fromBuffer(byte);
return talkReject;
} else {
String payload = utf8.decode(byte);
return payload;
}
case PayloadTypeConstant.talkPing: case PayloadTypeConstant.talkPing:
final TalkPing talkPing = TalkPing.fromBuffer(byte); if (messageType == MessageTypeConstant.Resp) {
return talkPing; final GenericResp genericResp = GenericResp.fromBuffer(byte);
return genericResp;
} else if (messageType == MessageTypeConstant.Req) {
final TalkPing talkPing = TalkPing.fromBuffer(byte);
return talkPing;
} else {
String payload = utf8.decode(byte);
return payload;
}
case PayloadTypeConstant.talkExpect: case PayloadTypeConstant.talkExpect:
final TalkExpect talkExpect = TalkExpect.fromBuffer(byte); if (messageType == MessageTypeConstant.Resp) {
return talkExpect; final GenericResp genericResp = GenericResp.fromBuffer(byte);
return genericResp;
} else if (messageType == MessageTypeConstant.Req) {
final TalkExpect talkExpect = TalkExpect.fromBuffer(byte);
return talkExpect;
} else {
String payload = utf8.decode(byte);
return payload;
}
case PayloadTypeConstant.talkData: case PayloadTypeConstant.talkData:
final TalkData talkData = TalkData.fromBuffer(byte); if (messageType == MessageTypeConstant.Resp) {
return talkData; final GenericResp genericResp = GenericResp.fromBuffer(byte);
return genericResp;
} else if (messageType == MessageTypeConstant.RealTimeData) {
final TalkData talkData = TalkData.fromBuffer(byte);
return talkData;
} else {
String payload = utf8.decode(byte);
return payload;
}
case PayloadTypeConstant.talkHangup: case PayloadTypeConstant.talkHangup:
final TalkHangup talkHangup = TalkHangup.fromBuffer(byte); if (messageType == MessageTypeConstant.Resp) {
return talkHangup; final GenericResp genericResp = GenericResp.fromBuffer(byte);
return genericResp;
} else if (messageType == MessageTypeConstant.RealTimeData) {
final TalkHangup talkHangup = TalkHangup.fromBuffer(byte);
return talkHangup;
} else {
String payload = utf8.decode(byte);
return payload;
}
default: default:
print('❌未知的payloadType类型,按照字符串解析'); print('❌未知的payloadType类型,按照字符串解析');
String payload = utf8.decode(byte); String payload = utf8.decode(byte);

View File

@ -2,6 +2,7 @@ import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/appRouters.dart'; import 'package:star_lock/appRouters.dart';
import 'package:star_lock/talk/startChart/constant/message_type_constant.dart';
import 'package:star_lock/talk/startChart/entity/scp_message.dart'; import 'package:star_lock/talk/startChart/entity/scp_message.dart';
import 'package:star_lock/talk/startChart/handle/scp_message_base_handle.dart'; import 'package:star_lock/talk/startChart/handle/scp_message_base_handle.dart';
import 'package:star_lock/talk/startChart/handle/scp_message_handle.dart'; import 'package:star_lock/talk/startChart/handle/scp_message_handle.dart';
@ -16,16 +17,23 @@ class UdpTalkRequestHandler extends ScpMessageBaseHandle
implements ScpMessageHandler { implements ScpMessageHandler {
@override @override
void handle(ScpMessage scpMessage) { void handle(ScpMessage scpMessage) {
print('收到对讲请求:${scpMessage}'); if (scpMessage.MessageType == MessageTypeConstant.Req) {
// final TalkReq genericResp = scpMessage.Payload; print('收到对讲请求:${scpMessage}');
// // final TalkReq talkReq = scpMessage.Payload;
// startChartManage.sendGenericRespSuccessMessage( //
// ToPeerId: scpMessage.FromPeerId!, startChartManage.sendGenericRespSuccessMessage(
// FromPeerId: scpMessage.ToPeerId!, ToPeerId: scpMessage.FromPeerId!,
// PayloadType: scpMessage.PayloadType!, FromPeerId: scpMessage.ToPeerId!,
// ); PayloadType: scpMessage.PayloadType!,
// // );
// _talkRequestEvent(); //
_talkRequestEvent();
} else if (scpMessage.MessageType == MessageTypeConstant.Resp) {
final GenericResp genericResp = scpMessage.Payload;
if (genericResp.code == 0) {
print('发送对讲成功');
}
}
} }
// //