diff --git a/lib/login/login/starLock_login_page.dart b/lib/login/login/starLock_login_page.dart index bf82431a..bef27c12 100755 --- a/lib/login/login/starLock_login_page.dart +++ b/lib/login/login/starLock_login_page.dart @@ -242,27 +242,6 @@ class _StarLockLoginPageState extends State { ToPeerId: '3phX8Ng2cZHz5NtP8xAf6nYy2z1BYytoejgjoHrWMGhH'); }, ), - SubmitBtn( - btnName: '发送网关初始化消息', - onClick: () { - StartChartManage().sendGatewayResetMessage( - ToPeerId: '3phX8Ng2cZHz5NtP8xAf6nYy2z1BYytoejgjoHrWMGhH', - gatewayId: 1000000000, - ); - }, - ), - SubmitBtn( - btnName: '播放铃声', - onClick: () { - UdpTalkPingHandler().playRingtone(); - }, - ), - SubmitBtn( - btnName: '停止播放铃声', - onClick: () { - UdpTalkPingHandler().stopRingtone(); - }, - ), SizedBox(height: 50.w), Row( mainAxisAlignment: MainAxisAlignment.center, diff --git a/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_logic.dart b/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_logic.dart index 2b47048d..3e767996 100755 --- a/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_logic.dart +++ b/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_logic.dart @@ -5,6 +5,7 @@ import 'package:flutter_voice_processor/flutter_voice_processor.dart'; import 'package:get/get.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:star_lock/talk/call/callTalk.dart'; +import 'package:star_lock/talk/startChart/start_chart_manage.dart'; import 'package:star_lock/talk/udp/udp_talkClass.dart'; import '../../../../app_settings/app_settings.dart'; @@ -24,6 +25,7 @@ class LockMonitoringLogic extends BaseGetXController { /// 收到UDP发送的状态 StreamSubscription? _getUDPStatusRefreshUIEvent; + void _getUDPStatusRefreshUIAction() { _getUDPStatusRefreshUIEvent = eventBus.on().listen((event) async { @@ -74,6 +76,9 @@ class LockMonitoringLogic extends BaseGetXController { UDPTalkClass().callNoAnswer(1); } }); + + // 发送同意接听消息 + StartChartManage().sendTalkAcceptMessage(); } /// 接听 @@ -104,6 +109,9 @@ class LockMonitoringLogic extends BaseGetXController { UDPTalkClass().callNoAnswer(2); } }); + + // 发送拒绝接听消息 + StartChartManage().sendTalkRejectMessage(); } /// 挂断 diff --git a/lib/talk/startChart/command/message_command.dart b/lib/talk/startChart/command/message_command.dart index 000097dc..8f94ee5a 100644 --- a/lib/talk/startChart/command/message_command.dart +++ b/lib/talk/startChart/command/message_command.dart @@ -10,6 +10,7 @@ import 'package:star_lock/talk/startChart/proto/gateway_reset.pb.dart'; import 'package:star_lock/talk/startChart/proto/generic.pb.dart'; import 'package:star_lock/talk/startChart/proto/talk_accept.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_ping.pb.dart'; import 'package:star_lock/talk/startChart/proto/talk_reject.pb.dart'; @@ -208,6 +209,30 @@ class MessageCommand { return _hexToBytes(serializedBytesString); } + // 预期接收消息 + static List talkExpectMessage({ + required String FromPeerId, + required String ToPeerId, + required TalkExpect talkExpect, + }) { + final payload = talkExpect.writeToBuffer(); + ScpMessage message = ScpMessage( + ProtocolFlag: ProtocolFlagConstant.scp01, + MessageType: MessageTypeConstant.Req, + MessageId: 1, + SpTotal: 0, + SpIndex: 0, + FromPeerId: FromPeerId, + ToPeerId: ToPeerId, + Payload: payload, + PayloadCRC: calculationCrc(payload), + PayloadLength: payload.length, + PayloadType: PayloadTypeConstant.talkExpect, + ); + String serializedBytesString = message.serialize(); + return _hexToBytes(serializedBytesString); + } + // GenericRespSuccess 消息 static List genericRespSuccessMessage({ required String FromPeerId, diff --git a/lib/talk/startChart/entity/scp_message.dart b/lib/talk/startChart/entity/scp_message.dart index a822ca4c..83403caf 100644 --- a/lib/talk/startChart/entity/scp_message.dart +++ b/lib/talk/startChart/entity/scp_message.dart @@ -10,6 +10,7 @@ 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/generic.pb.dart'; import 'package:star_lock/talk/startChart/proto/remote_unlock.pb.dart'; +import 'package:star_lock/talk/startChart/proto/talk_request.pb.dart'; class ScpMessage { ScpMessage({ @@ -302,8 +303,8 @@ class ScpMessage { GatewayResetResp.fromBuffer(byte); return gatewayResetResp; case PayloadTypeConstant.callRequest: - final GenericResp genericResp = GenericResp.fromBuffer(byte); - return genericResp; + final TalkReq talkReq = TalkReq.fromBuffer(byte); + return talkReq; case PayloadTypeConstant.talkAccept: final GenericResp genericResp = GenericResp.fromBuffer(byte); return genericResp; diff --git a/lib/talk/startChart/handle/impl/udp_go_online_handler.dart b/lib/talk/startChart/handle/impl/udp_go_online_handler.dart index 5cb6b5f4..79b34e5e 100644 --- a/lib/talk/startChart/handle/impl/udp_go_online_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_go_online_handler.dart @@ -10,7 +10,6 @@ class UdpGoOnlineHandler extends ScpMessageBaseHandle implements ScpMessageHandler { @override void handle(ScpMessage scpMessage) { - final startChartManage = StartChartManage(); final LoginResponse loginResponse = scpMessage.Payload; final responseType = loginResponse.responseType; if (responseType != null && 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 c174fa16..7cb5e207 100644 --- a/lib/talk/startChart/handle/impl/udp_talk_request_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_talk_request_handler.dart @@ -7,6 +7,7 @@ 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/proto/gateway_reset.pb.dart'; import 'package:star_lock/talk/startChart/proto/generic.pb.dart'; +import 'package:star_lock/talk/startChart/proto/talk_request.pb.dart'; import 'package:star_lock/tools/storage.dart'; import '../../start_chart_manage.dart'; @@ -15,17 +16,16 @@ class UdpTalkRequestHandler extends ScpMessageBaseHandle implements ScpMessageHandler { @override void handle(ScpMessage scpMessage) { - final GenericResp genericResp = scpMessage.Payload; - if (checkGenericRespSuccess(genericResp)) { - // 回复成功消息 - startChartManage.sendGenericRespSuccessMessage( - ToPeerId: scpMessage.FromPeerId!, - FromPeerId: scpMessage.ToPeerId!, - PayloadType: scpMessage.PayloadType!, - ); - // 处理收到接听请求后的事件 - _talkRequestEvent(); - } + print('收到对讲请求:${scpMessage}'); + final TalkReq genericResp = scpMessage.Payload; + // 回复成功消息 + startChartManage.sendGenericRespSuccessMessage( + ToPeerId: scpMessage.FromPeerId!, + FromPeerId: scpMessage.ToPeerId!, + PayloadType: scpMessage.PayloadType!, + ); + // 处理收到接听请求后的事件 + _talkRequestEvent(); } // 来电事件的处理 diff --git a/lib/talk/startChart/start_chart_manage.dart b/lib/talk/startChart/start_chart_manage.dart index 6b5f8595..24ea23d2 100644 --- a/lib/talk/startChart/start_chart_manage.dart +++ b/lib/talk/startChart/start_chart_manage.dart @@ -19,6 +19,7 @@ import 'package:star_lock/talk/startChart/entity/scp_message.dart'; import 'package:star_lock/talk/startChart/entity/star_chart_register_node_entity.dart'; import 'package:star_lock/talk/startChart/handle/scp_message_handle.dart'; import 'package:star_lock/talk/startChart/handle/scp_message_handler_factory.dart'; +import 'package:star_lock/talk/startChart/proto/talk_expect.pb.dart'; import 'package:star_lock/tools/deviceInfo_utils.dart'; import 'package:star_lock/tools/storage.dart'; import 'package:uuid/uuid.dart'; @@ -85,13 +86,17 @@ class StartChartManage { /// 客户端注册 Future _clientRegister() async { - _log(text: '开始注册客户端'); - final StarChartRegisterNodeEntity requestStarChartRegisterNode = - await _requestStarChartRegisterNode(); - await _saveStarChartRegisterNodeToStorage(requestStarChartRegisterNode); - _log(text: '获取到星图注册节点信息:$requestStarChartRegisterNode'); - FromPeerId = requestStarChartRegisterNode.peer!.id ?? ''; - ToPeerId = echoPeerId; + final StarChartRegisterNodeEntity? registerNodeEntity = + await Storage.getStarChartRegisterNodeInfo(); + if (registerNodeEntity != null) { + _log(text: '获取到星图注册节点信息:$registerNodeEntity'); + FromPeerId = registerNodeEntity.peer!.id ?? ''; + } else { + _log(text: '开始注册客户端'); + final StarChartRegisterNodeEntity requestStarChartRegisterNode = + await _requestStarChartRegisterNode(); + await _saveStarChartRegisterNodeToStorage(requestStarChartRegisterNode); + } } // 中继查询 @@ -109,6 +114,7 @@ class StartChartManage { remoteHost = parseUdpUrl['host'] ?? ''; remotePort = parseUdpUrl['port'] ?? ''; relayPeerId = data?.peerID ?? ''; + ToPeerId = relayPeerId; } _log(text: '中继信息----》${relayInfoEntity}'); } @@ -219,8 +225,7 @@ class StartChartManage { } // 发送同意接听消息 - void sendTalkAcceptMessage( - {required String ToPeerId, required int gatewayId}) async { + void sendTalkAcceptMessage() async { final message = MessageCommand.talkAcceptMessage( ToPeerId: ToPeerId, FromPeerId: FromPeerId, @@ -229,10 +234,7 @@ class StartChartManage { } // 发送拒绝接听消息 - void sendTalkRejectMessage({ - required String ToPeerId, - required int gatewayId, - }) async { + void sendTalkRejectMessage() async { final message = MessageCommand.talkRejectMessage( ToPeerId: ToPeerId, FromPeerId: FromPeerId, @@ -240,6 +242,19 @@ class StartChartManage { await _sendMessage(message: message); } + // 发送期望接受消息 + void sendTalkExpectMessage() async { + final message = MessageCommand.talkExpectMessage( + ToPeerId: ToPeerId, + FromPeerId: FromPeerId, + talkExpect: TalkExpect( + videoType: [TalkExpect_VideoTypeE.H264], + audioType: [TalkExpect_AudioTypeE.G711], + ), + ); + await _sendMessage(message: message); + } + // 回复成功消息 void sendGenericRespSuccessMessage( {required String ToPeerId, @@ -408,10 +423,7 @@ class StartChartManage { listenAddrDataList.add( ListenAddrData( type: ListenAddrTypeConstant.relay, - address: IpConstant.udpUrl + - relayInfoEntity.client_addr! + - ':' + - localPort.toString(), + address: relayInfoEntity.relay_list!.last!.listenAddr!, ), ); }