import 'dart:convert'; import 'package:flutter_easyloading/flutter_easyloading.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/generic.pb.dart'; import 'package:star_lock/talk/starChart/proto/talk_hangup.pb.dart'; import '../../star_chart_manage.dart'; class UdpTalkHangUpHandler extends ScpMessageBaseHandle implements ScpMessageHandler { @override void handleReq(ScpMessage scpMessage) { // 只有接听成功或者等待接听时才处理挂断请求 if (talkStatus.status == TalkStatus.answeredSuccessfully || talkStatus.status == TalkStatus.passiveCallWaitingAnswer || talkStatus.status == TalkStatus.proactivelyCallWaitingAnswer) { // 回复请求 replySuccessMessage(scpMessage); talkStatus.setHangingUpDuring(); stopRingtone(); startChartManage.stopTalkExpectMessageTimer(); startChartManage.stopTalkPingMessageTimer(); // 挂断之后,停止对讲请求超时监听定时器 talkeRequestOverTimeTimerManager.cancel(); talkePingOverTimeTimerManager.cancel(); talkDataOverTimeTimerManager.cancel(); EasyLoading.showToast('已挂断'.tr); startChartManage.stopSendingRbcuInfoMessages(); startChartManage.stopSendingRbcuProBeMessages(); startChartManage.stopTalkHangupMessageTimer(); Get.back(); } } @override void handleResp(ScpMessage scpMessage) { talkStatus.setHangingUpDuring(); stopRingtone(); startChartManage.stopTalkExpectMessageTimer(); startChartManage.stopTalkPingMessageTimer(); // 挂断之后,停止对讲请求超时监听定时器 talkeRequestOverTimeTimerManager.cancel(); talkePingOverTimeTimerManager.cancel(); talkDataOverTimeTimerManager.cancel(); startChartManage.stopSendingRbcuInfoMessages(); startChartManage.stopSendingRbcuProBeMessages(); startChartManage.stopTalkHangupMessageTimer(); } @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.RealTimeData) { final TalkHangup talkHangup = TalkHangup(); talkHangup.mergeFromBuffer(byte); return talkHangup; } else { String payload = utf8.decode(byte); return payload; } } }