import 'dart:convert'; import 'dart:typed_data'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_pcm_sound/flutter_pcm_sound.dart'; import 'package:get/get.dart'; import 'package:star_lock/talk/starChart/constant/message_type_constant.dart'; import 'package:star_lock/talk/starChart/constant/talk_status.dart'; import 'package:star_lock/talk/starChart/entity/scp_message.dart'; import 'package:star_lock/talk/starChart/handle/scp_message_base_handle.dart'; import 'package:star_lock/talk/starChart/handle/scp_message_handle.dart'; import 'package:star_lock/talk/starChart/proto/gateway_reset.pb.dart'; import 'package:star_lock/talk/starChart/proto/generic.pb.dart'; import 'package:star_lock/talk/starChart/proto/talk_accept.pb.dart'; import 'package:star_lock/talk/starChart/proto/talk_expect.pb.dart'; import '../../star_chart_manage.dart'; class UdpTalkAcceptHandler extends ScpMessageBaseHandle implements ScpMessageHandler { @override void handleReq(ScpMessage scpMessage) { // 回复同意接听消息 replySuccessMessage(scpMessage); } @override void handleResp(ScpMessage scpMessage) { // 收到同意接听回复 final GenericResp genericResp = scpMessage.Payload; if (checkGenericRespSuccess(genericResp)) { // 停止同意接听的重发 startChartManage.stopTalkAcceptTimer(); // 接听之后增加期望音频的接收 _handleSendExpect(); // 停止播放铃声 stopRingtone(); // 设置状态为接听成功 talkStatus.setAnsweredSuccessfully(); // 同意接听之后,停止对讲请求超时监听定时器 talkeRequestOverTimeTimerManager.renew(); talkeRequestOverTimeTimerManager.cancel(); // 启动发送rbcuInfo数据 // startChartManage.startSendingRbcuInfoMessages( // ToPeerId: startChartManage.lockPeerId); } } @override void handleInvalidReq(ScpMessage scpMessage) {} @override void handleRealTimeData(ScpMessage scpMessage) {} @override deserializePayload( {required int payloadType, required int messageType, required List byte, int? offset, int? PayloadLength, int? spTotal, int? spIndex, int? messageId}) { if (messageType == MessageTypeConstant.Resp) { final GenericResp genericResp = GenericResp(); genericResp.mergeFromBuffer(byte); return genericResp; } else if (messageType == MessageTypeConstant.Req) { final TalkAcceptReq talkAccept = TalkAcceptReq(); talkAccept.mergeFromBuffer(byte); return talkAccept; } else { String payload = utf8.decode(byte); return payload; } } void _handleSendExpect() { // 修改预期数据并启动发送预期数据定时器,在收到回复时停止 startChartManage.sendImageVideoAndG711AudioTalkExpectData(); } }