fix:完善各个对讲状态下的逻辑

This commit is contained in:
liyi 2025-01-02 10:30:07 +08:00
parent 01885f8a7c
commit ff9564b55a
7 changed files with 72 additions and 79 deletions

View File

@ -12,6 +12,7 @@ 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_accept.pb.dart';
import 'package:star_lock/talk/startChart/proto/talk_expect.pb.dart';
import '../../start_chart_manage.dart';
@ -25,26 +26,21 @@ class UdpTalkAcceptHandler extends ScpMessageBaseHandle
@override
void handleResp(ScpMessage scpMessage) {
if (talkStatus.status != TalkStatus.waitingAnswer) {
//
return;
}
//
final GenericResp genericResp = scpMessage.Payload;
if (checkGenericRespSuccess(genericResp)) {
//
_handleStartTalkPing();
//
_handleStartSendTalkExpectDataRequest();
//
// _handleCheckTalkDataTimer();
print('收到同意接听的回复');
//
startChartManage.stopTalkAcceptTimer();
//
_handleSendExpect();
//
stopRingtone();
//
talkStatus.setAnsweredSuccessfully();
// //
// talkeRequestOverTimeTimerManager.renewTimer();
// talkeRequestOverTimeTimerManager.dispose();
//
talkeRequestOverTimeTimerManager.renew();
talkeRequestOverTimeTimerManager.cancel();
}
}
@ -78,23 +74,8 @@ class UdpTalkAcceptHandler extends ScpMessageBaseHandle
}
}
// x秒内是否收到通话保持
void _handleStartTalkPing() {
//
startChartManage.startTalkPingMessageTimer();
// x秒内没有收到通话保持则执行的操作
talkePingOverTimeTimerManager.start();
}
/// x秒内是否收到通话数据
void _handleCheckTalkDataTimer() {
// x秒内没有收到通话保持则执行的操作
talkDataOverTimeTimerManager.start();
}
///
void _handleStartSendTalkExpectDataRequest() {
//
startChartManage.startTalkExpectTimer();
void _handleSendExpect() {
//
startChartManage.sendImageVideoAndG711AudioTalkExpectData();
}
}

View File

@ -8,6 +8,7 @@ import 'package:path_provider/path_provider.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/talk/call/g711.dart';
import 'package:star_lock/talk/startChart/constant/message_type_constant.dart';
import 'package:star_lock/talk/startChart/constant/talk_status.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';
@ -15,6 +16,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_data.pb.dart';
import 'package:star_lock/talk/startChart/proto/talk_data.pbserver.dart';
import 'package:star_lock/talk/startChart/proto/talk_data_h264_frame.pb.dart';
class UdpTalkDataHandler extends ScpMessageBaseHandle
implements ScpMessageHandler {
@ -105,7 +107,10 @@ class UdpTalkDataHandler extends ScpMessageBaseHandle
/// h264协议的数据
void _handleVideoH264(TalkData talkData) {
// talkDataRepository.addTalkData(talkData);
final TalkDataH264Frame talkDataH264Frame = TalkDataH264Frame();
talkDataH264Frame.mergeFromBuffer(talkData.content);
AppLog.log('H264 TalkData :$talkDataH264Frame');
talkDataRepository.addTalkData(talkData);
}
///
@ -113,11 +118,10 @@ class UdpTalkDataHandler extends ScpMessageBaseHandle
final List<Uint8List> processCompletePayload =
await _processCompletePayload(Uint8List.fromList(talkData.content));
// AppLog.log('得到完整的帧:${processCompletePayload.length}'); //
processCompletePayload.forEach((element) {
talkData.content = element;
talkDataRepository.addTalkData(talkData);
//
talkStatus.setDuringCall();
});
}
@ -129,8 +133,6 @@ class UdpTalkDataHandler extends ScpMessageBaseHandle
List<int> pcmBytes = G711().convertList(g711Data);
talkData.content = pcmBytes;
talkDataRepository.addTalkData(talkData);
//
talkStatus.setDuringCall();
} catch (e) {
print('Error decoding G.711 to PCM: $e');
}

View File

@ -9,40 +9,35 @@ import 'package:star_lock/talk/startChart/handle/scp_message_handle.dart';
import 'package:star_lock/talk/startChart/proto/generic.pb.dart';
import 'package:star_lock/talk/startChart/proto/talk_hangup.pb.dart';
import '../../start_chart_manage.dart';
class UdpTalkHangUpHandler extends ScpMessageBaseHandle
implements ScpMessageHandler {
@override
void handleReq(ScpMessage scpMessage) {
if (talkStatus.status != TalkStatus.duringCall) {
if (talkStatus.status != TalkStatus.answeredSuccessfully) {
//
return;
}
startChartManage.sendGenericRespSuccessMessage(
ToPeerId: scpMessage.FromPeerId!,
FromPeerId: scpMessage.ToPeerId!,
PayloadType: scpMessage.PayloadType!,
);
//
startChartManage.stopTalkPingMessageTimer();
startChartManage.stopTalkExpectMessageTimer();
//
replySuccessMessage(scpMessage);
talkStatus.setHangingUpDuring();
stopRingtone();
StartChartManage().stopTalkExpectMessageTimer();
StartChartManage().stopTalkPingMessageTimer();
}
@override
void handleResp(ScpMessage scpMessage) {
//
startChartManage.stopTalkPingMessageTimer();
startChartManage.stopTalkExpectMessageTimer();
talkStatus.setHangingUpDuring();
stopRingtone();
//
// talkeRequestOverTimeTimerManager.renewTimer();
// talkeRequestOverTimeTimerManager.dispose();
//
talkeRequestOverTimeTimerManager.renew();
talkeRequestOverTimeTimerManager.cancel();
talkePingOverTimeTimerManager.renew();
talkePingOverTimeTimerManager.cancel();
}
@override

View File

@ -22,9 +22,10 @@ class UdpTalkRejectHandler extends ScpMessageBaseHandle
replySuccessMessage(scpMessage);
//
stopRingtone();
StartChartManage().stopTalkExpectMessageTimer();
StartChartManage().stopTalkPingMessageTimer();
//
talkStatus.setRejected();
}
@override
@ -33,10 +34,11 @@ class UdpTalkRejectHandler extends ScpMessageBaseHandle
startChartManage.stopTalkExpectMessageTimer();
stopRingtone();
//
// talkeRequestOverTimeTimerManager.renewTimer();
// talkeRequestOverTimeTimerManager.dispose();
talkeRequestOverTimeTimerManager.renew();
talkeRequestOverTimeTimerManager.cancel();
talkePingOverTimeTimerManager.renew();
talkePingOverTimeTimerManager.cancel();
}
@override

View File

@ -12,38 +12,31 @@ 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_expect.pb.dart';
import 'package:star_lock/talk/startChart/proto/talk_request.pb.dart';
import 'package:star_lock/tools/storage.dart';
class UdpTalkRequestHandler extends ScpMessageBaseHandle
implements ScpMessageHandler {
@override
void handleReq(ScpMessage scpMessage) {
if (talkStatus == TalkStatus.waitingAnswer) {
void handleReq(ScpMessage scpMessage) async {
//
final loginData = await Storage.getLoginData();
if (loginData == null ||
talkStatus.status == TalkStatus.waitingAnswer ||
talkStatus.status == TalkStatus.answeredSuccessfully) {
//
return;
}
//
replySuccessMessage(scpMessage);
//
final TalkReq talkReq = scpMessage.Payload;
//
startChartManage.sendGenericRespSuccessMessage(
ToPeerId: scpMessage.FromPeerId!,
FromPeerId: scpMessage.ToPeerId!,
PayloadType: scpMessage.PayloadType!,
);
startChartManage.FromPeerId = scpMessage.ToPeerId!;
startChartManage.ToPeerId = scpMessage.FromPeerId!;
//
_talkRequestEvent(talkObjectName: talkReq.callerName);
//
// talkeRequestOverTimeTimerManager.startTimer();
// talkeRequestOverTimeTimerManager.setOnTimeout(() {
// if (talkStatus.status == TalkStatus.waitingAnswer) {
// //
// startChartManage.sendTalkRejectMessage();
// Get.back();
// }
// });
}
@override
@ -63,16 +56,22 @@ class UdpTalkRequestHandler extends ScpMessageBaseHandle
//
void _talkRequestEvent({required String talkObjectName}) {
//
_handleSendExpect();
//
playRingtone();
//
_showTalkRequestNotification(talkObjectName: talkObjectName);
//
talkStatus.setWaitingAnswer();
//
_handleStartTalkPing();
//
talkeRequestOverTimeTimerManager.start();
//
Get.toNamed(
Routers.starChartTalkView,
);
//
HapticFeedback.vibrate();
//
talkStatus.setWaitingAnswer();
}
//
@ -119,4 +118,17 @@ class UdpTalkRequestHandler extends ScpMessageBaseHandle
return payload;
}
}
void _handleSendExpect() {
//
startChartManage.sendOnlyImageVideoTalkExpectData();
}
// x秒内是否收到通话保持
void _handleStartTalkPing() {
//
startChartManage.startTalkPingMessageTimer();
// x秒内没有收到通话保持则执行的操作
talkePingOverTimeTimerManager.start();
}
}

View File

@ -27,7 +27,7 @@ class TalkePingOverTimeTimerManager {
//
static void _handleTalkePingOverTime() {
if (talkStatus.status == TalkStatus.duringCall) {
if (talkStatus.status == TalkStatus.answeredSuccessfully) {
EasyLoading.showToast('通话异常中断', duration: 2000.milliseconds);
//
StartChartManage().stopTalkPingMessageTimer();

View File

@ -28,6 +28,7 @@ class TalkeRequestOverTimeTimerManager {
//
static void _handleTalkeRequestOverTime() {
if (talkStatus.status == TalkStatus.waitingAnswer) {
EasyLoading.showToast('通话未接通,以挂断', duration: 2000.milliseconds);
//
StartChartManage().sendTalkRejectMessage();
Get.back();