diff --git a/lib/login/login/starLock_login_page.dart b/lib/login/login/starLock_login_page.dart index 0a920d4f..40a7c771 100755 --- a/lib/login/login/starLock_login_page.dart +++ b/lib/login/login/starLock_login_page.dart @@ -246,7 +246,7 @@ class _StarLockLoginPageState extends State { btnName: '发送对讲请求', onClick: () { StartChartManage().sendCallRequestMessage( - ToPeerId: '59wtMp6DTpBwrEViT9FQpBMZWnc6MEnLxGuP9eYB4JKt', + ToPeerId: 'GCvA1LeqU1P9bUvxGEEfW41zBqBAiev3enWWuG6k2ekM', ); }, ), diff --git a/lib/talk/startChart/entity/scp_message.dart b/lib/talk/startChart/entity/scp_message.dart index 0e969159..ef149264 100644 --- a/lib/talk/startChart/entity/scp_message.dart +++ b/lib/talk/startChart/entity/scp_message.dart @@ -3,17 +3,22 @@ import 'package:crc32_checksum/crc32_checksum.dart'; import 'package:crypto/crypto.dart'; import 'package:get/get.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/entity/heartbeat_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/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/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_expect.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_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_request.pb.dart'; @@ -255,6 +260,7 @@ class ScpMessage { offset += message.PayloadLength!; message.Payload = _handlePayLoad( payloadType: message.PayloadType ?? 0, + messageType: message.MessageType ?? 0, byte: sublist, offset: offset, PayloadLength: message.PayloadLength, @@ -283,6 +289,7 @@ class ScpMessage { // 根据不同payloadType序列化对应的payload结构体 static dynamic _handlePayLoad({ required int payloadType, + required int messageType, required List byte, int? offset, int? PayloadLength, @@ -304,46 +311,145 @@ class ScpMessage { return payload; case PayloadTypeConstant.gatewayReset: // 初始化网关 - final GatewayResetResp gatewayResetResp = - GatewayResetResp.fromBuffer(byte); - return gatewayResetResp; + if (messageType == MessageTypeConstant.Resp) { + final GatewayResetResp 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: - final TalkReq talkReq = TalkReq.fromBuffer(byte); - return talkReq; + if (messageType == MessageTypeConstant.Resp) { + 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: - final GenericResp genericResp = GenericResp.fromBuffer(byte); - return genericResp; + if (messageType == MessageTypeConstant.Resp) { + 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: - final GenericResp genericResp = GenericResp.fromBuffer(byte); - return genericResp; + if (messageType == MessageTypeConstant.Resp) { + 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: final BleResp bleResp = BleResp.fromBuffer(byte); return bleResp; case PayloadTypeConstant.remoteUnlock: - final RemoteUnlockResp remoteUnlockResp = - RemoteUnlockResp.fromBuffer(byte); - return remoteUnlockResp; + if (messageType == MessageTypeConstant.Resp) { + final GenericResp genericResp = GenericResp.fromBuffer(byte); + 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: - final GenericResp genericResp = GenericResp.fromBuffer(byte); - return genericResp; + if (messageType == MessageTypeConstant.Resp) { + 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: - final GenericResp genericResp = GenericResp.fromBuffer(byte); - return genericResp; + if (messageType == MessageTypeConstant.Resp) { + 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: - final TalkReject talkReject = TalkReject.fromBuffer(byte); - return talkReject; + if (messageType == MessageTypeConstant.Resp) { + 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: - final TalkPing talkPing = TalkPing.fromBuffer(byte); - return talkPing; + if (messageType == MessageTypeConstant.Resp) { + 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: - final TalkExpect talkExpect = TalkExpect.fromBuffer(byte); - return talkExpect; + if (messageType == MessageTypeConstant.Resp) { + 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: - final TalkData talkData = TalkData.fromBuffer(byte); - return talkData; + if (messageType == MessageTypeConstant.Resp) { + 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: - final TalkHangup talkHangup = TalkHangup.fromBuffer(byte); - return talkHangup; + if (messageType == MessageTypeConstant.Resp) { + 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: print('❌未知的payloadType类型,按照字符串解析'); String payload = utf8.decode(byte); diff --git a/lib/talk/startChart/handle/impl/udp_talk_request_handler.dart b/lib/talk/startChart/handle/impl/udp_talk_request_handler.dart index 01997853..df8c2d50 100644 --- a/lib/talk/startChart/handle/impl/udp_talk_request_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_talk_request_handler.dart @@ -2,6 +2,7 @@ import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:get/get.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/handle/scp_message_base_handle.dart'; import 'package:star_lock/talk/startChart/handle/scp_message_handle.dart'; @@ -16,16 +17,23 @@ class UdpTalkRequestHandler extends ScpMessageBaseHandle implements ScpMessageHandler { @override void handle(ScpMessage scpMessage) { - print('收到对讲请求:${scpMessage}'); - // final TalkReq genericResp = scpMessage.Payload; - // // 回复成功消息 - // startChartManage.sendGenericRespSuccessMessage( - // ToPeerId: scpMessage.FromPeerId!, - // FromPeerId: scpMessage.ToPeerId!, - // PayloadType: scpMessage.PayloadType!, - // ); - // // 处理收到接听请求后的事件 - // _talkRequestEvent(); + if (scpMessage.MessageType == MessageTypeConstant.Req) { + print('收到对讲请求:${scpMessage}'); + final TalkReq talkReq = scpMessage.Payload; + // 回复成功消息 + startChartManage.sendGenericRespSuccessMessage( + ToPeerId: scpMessage.FromPeerId!, + FromPeerId: scpMessage.ToPeerId!, + PayloadType: scpMessage.PayloadType!, + ); + // 处理收到接听请求后的事件 + _talkRequestEvent(); + } else if (scpMessage.MessageType == MessageTypeConstant.Resp) { + final GenericResp genericResp = scpMessage.Payload; + if (genericResp.code == 0) { + print('发送对讲成功'); + } + } } // 来电事件的处理