app-starlock/lib/talk/starChart/handle/impl/udp_talk_expect_handler.dart

150 lines
5.6 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'dart:convert';
import 'dart:typed_data';
import 'package:flutter/services.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:get/get.dart';
import 'package:star_lock/appRouters.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/main/lockMian/entity/lockListInfo_entity.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_data.pb.dart';
import 'package:star_lock/talk/starChart/proto/talk_expect.pb.dart';
import 'package:star_lock/talk/starChart/views/talkView/talk_view_logic.dart';
import 'package:star_lock/talk/starChart/views/talkView/talk_view_state.dart';
import 'package:star_lock/tools/commonDataManage.dart';
import 'package:star_lock/tools/storage.dart';
import '../../star_chart_manage.dart';
class UdpTalkExpectHandler extends ScpMessageBaseHandle
implements ScpMessageHandler {
// final TalkViewState talkViewState = Get.put(TalkViewLogic()).state;
@override
void handleReq(ScpMessage scpMessage) {
// 收到预期音视频数据请求
final TalkExpectReq talkExpect = scpMessage.Payload;
// 回复请求
replySuccessMessage(scpMessage);
}
@override
void handleResp(ScpMessage scpMessage) async {
// 收到预期音视频数据回复
final TalkExpectResp talkExpectResp = scpMessage.Payload;
if (talkExpectResp != null) {
// print('收到预期音视频数据回复,scpMessage:$scpMessage');
// 停止发送预期数据的定时器
startChartManage.stopTalkExpectMessageTimer();
// 停止发送对讲请求
startChartManage.stopCallRequestMessageTimer();
// talkViewState.rotateAngle.value = talkExpectResp.rotate ?? 0;
startChartManage.rotateAngle = talkExpectResp.rotate;
startChartManage.videoWidth = talkExpectResp.width;
startChartManage.videoHeight = talkExpectResp.height;
// 收到预期数据的应答后,代表建立了连接,启动通话保持的监听
// 启动通话保持监听定时器用来判断如果x秒内没有收到通话保持则执行的操作;
talkePingOverTimeTimerManager.start();
// 启动通话数据监听
talkDataOverTimeTimerManager.start();
if (talkStatus.status == TalkStatus.proactivelyCallWaitingAnswer) {
// 停止播放铃声
stopRingtone();
// 设置为接听成功
talkStatus.setAnsweredSuccessfully();
// 主动呼叫时需要启动ping
startChartManage.startTalkPingMessageTimer();
} else if (talkStatus.status != TalkStatus.answeredSuccessfully) {
playRingtone();
}
AppLog.log(
'视频画面需要旋转:${talkExpectResp.rotate},画面宽高:${talkExpectResp.width}-${talkExpectResp.height}');
// 获取锁支持项
final LockListInfoItemEntity currentKeyInfo =
CommonDataManage().currentKeyInfo;
// 0、wifi保活 1、wifi不保活图传 2、wifi不保活可视对讲
var isWifiLockType = currentKeyInfo.lockFeature?.wifiLockType == 1;
final LockListInfoGroupEntity? lockListInfoGroupEntity =
await Storage.getLockMainListData();
if (lockListInfoGroupEntity != null) {
lockListInfoGroupEntity!.groupList?.forEach((element) {
final lockList = element.lockList;
if (lockList != null && lockList.length != 0) {
for (var lockInfo in lockList) {
final peerId = lockInfo.network?.peerId;
if (peerId != null && peerId != '') {
if (peerId == scpMessage.FromPeerId) {
isWifiLockType = lockInfo.lockFeature?.wifiLockType == 1;
}
}
}
}
});
}
if (isWifiLockType ||
(talkExpectResp.rotate == 0 &&
talkExpectResp.width == 640 &&
talkExpectResp.height == 480)) {
Get.toNamed(Routers.imageTransmissionView);
return;
}
if (startChartManage
.getDefaultTalkExpect()
.videoType
.contains(VideoTypeE.H264)) {
Get.toNamed(
Routers.h264View,
);
} else {
Get.toNamed(
Routers.starChartTalkView,
);
}
}
}
@override
void handleInvalidReq(ScpMessage scpMessage) {}
@override
void handleRealTimeData(ScpMessage scpMessage) {}
@override
deserializePayload(
{required int payloadType,
required int messageType,
required List<int> byte,
int? offset,
int? PayloadLength,
int? spTotal,
int? spIndex,
int? messageId}) {
if (messageType == MessageTypeConstant.Resp) {
final TalkExpectResp talkExpectResp = TalkExpectResp();
talkExpectResp.mergeFromBuffer(byte);
return talkExpectResp;
// final GenericResp genericResp = GenericResp();
// genericResp.mergeFromBuffer(byte);
// return genericResp;
} else if (messageType == MessageTypeConstant.Req) {
final TalkExpectReq talkExpect = TalkExpectReq();
talkExpect.mergeFromBuffer(byte);
return talkExpect;
} else {
String payload = utf8.decode(byte);
return payload;
}
}
}