fix:调整挂断后的逻辑、增加账号未登录时不初始化星图逻辑、增加修改预期接收数据方法
This commit is contained in:
parent
13e3839d67
commit
25bbd0cd19
@ -9,6 +9,7 @@ import 'package:get/get.dart';
|
||||
import 'package:pointycastle/export.dart' as pc;
|
||||
import 'package:star_lock/app_settings/app_settings.dart';
|
||||
import 'package:star_lock/flavors.dart';
|
||||
import 'package:star_lock/login/login/entity/LoginData.dart';
|
||||
import 'package:star_lock/login/login/entity/LoginEntity.dart';
|
||||
import 'package:star_lock/network/api_repository.dart';
|
||||
import 'package:star_lock/network/start_chart_api.dart';
|
||||
@ -24,6 +25,9 @@ import 'package:star_lock/talk/startChart/entity/report_information_data.dart';
|
||||
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/exception/start_chart_message_exception.dart';
|
||||
import 'package:star_lock/talk/startChart/handle/other/talke_data_over_time_timer_manager.dart';
|
||||
import 'package:star_lock/talk/startChart/handle/other/talke_ping_over_time_timer_manager.dart';
|
||||
import 'package:star_lock/talk/startChart/handle/other/talke_request_over_time_timer_manager.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_data.pb.dart';
|
||||
@ -44,6 +48,12 @@ class StartChartManage {
|
||||
|
||||
// 单例对象
|
||||
static final StartChartManage _instance = StartChartManage._internal();
|
||||
final TalkeRequestOverTimeTimerManager talkeRequestOverTimeTimerManager =
|
||||
TalkeRequestOverTimeTimerManager();
|
||||
final TalkePingOverTimeTimerManager talkePingOverTimeTimerManager =
|
||||
TalkePingOverTimeTimerManager();
|
||||
final TalkDataOverTimeTimerManager talkDataOverTimeTimerManager =
|
||||
TalkDataOverTimeTimerManager();
|
||||
|
||||
// 工厂构造函数,返回单例对象
|
||||
factory StartChartManage() {
|
||||
@ -80,6 +90,7 @@ class StartChartManage {
|
||||
Timer? talkPingTimer; // 发送通话保持消息定时器
|
||||
int talkExpectIntervalTime = 1; // 发送通话预期数据的消息间隔(s)
|
||||
Timer? talkExpectTimer; // 发送通话预期消息定时器
|
||||
Timer? talkAcceptTimer; // 重发同意接听消息定时器
|
||||
int talkDataIntervalTime = 10; // 通话数据的消息间隔(ms)
|
||||
Timer? talkDataTimer; // 发送通话数据消息定时器
|
||||
|
||||
@ -101,12 +112,15 @@ class StartChartManage {
|
||||
|
||||
// 星图服务初始化
|
||||
Future<void> init() async {
|
||||
if (isOnlineStartChartServer && _udpSocket != null) {
|
||||
// 判断是否登录账户
|
||||
final loginData = await Storage.getLoginData();
|
||||
|
||||
if ((isOnlineStartChartServer && _udpSocket != null) || loginData == null) {
|
||||
// 如果已经上线就不进行初始化
|
||||
return;
|
||||
}
|
||||
// 节点注册
|
||||
await _clientRegister();
|
||||
await _clientRegister(loginData);
|
||||
// 中继查询
|
||||
await _relayQuery();
|
||||
// 初始化udp服务
|
||||
@ -116,12 +130,10 @@ class StartChartManage {
|
||||
}
|
||||
|
||||
/// 客户端注册
|
||||
Future<void> _clientRegister() async {
|
||||
final StarChartRegisterNodeEntity? registerNodeEntity =
|
||||
await Storage.getStarChartRegisterNodeInfo();
|
||||
if (registerNodeEntity != null && registerNodeEntity.peer?.id != null) {
|
||||
_log(text: '获取到星图注册节点信息:$registerNodeEntity');
|
||||
FromPeerId = registerNodeEntity.peer!.id ?? '';
|
||||
Future<void> _clientRegister(LoginData? loginData) async {
|
||||
if (loginData?.starchart?.starchartId != null) {
|
||||
_log(text: '获取到星图注册节点信息:${loginData?.starchart}');
|
||||
FromPeerId = loginData?.starchart?.starchartId ?? '';
|
||||
} else {
|
||||
_log(text: '开始注册客户端');
|
||||
final StarChartRegisterNodeEntity requestStarChartRegisterNode =
|
||||
@ -143,6 +155,8 @@ class StartChartManage {
|
||||
starchartPeerPublicKey: registerNodeEntity?.peer?.publicKey ?? '',
|
||||
starchartPeerPrivateKey: registerNodeEntity?.peer?.privateKey ?? '',
|
||||
);
|
||||
registerNodeEntity?.peer?.id = entity.data?.starchart?.starchartId;
|
||||
await Storage.saveStarChartRegisterNodeInfo(registerNodeEntity!);
|
||||
if (entity.errorCode!.codeIsSuccessful) {
|
||||
AppLog.log('绑定成功');
|
||||
} else {
|
||||
@ -237,7 +251,7 @@ class StartChartManage {
|
||||
|
||||
// 发送对讲请求消息
|
||||
Future<void> sendCallRequestMessage({required String ToPeerId}) async {
|
||||
if (talkStatus.status == TalkStatus.duringCall) {
|
||||
if (talkStatus.status == TalkStatus.answeredSuccessfully) {
|
||||
_log(text: '已经在通话中,请勿重复发送对讲请求');
|
||||
return;
|
||||
}
|
||||
@ -364,23 +378,13 @@ class StartChartManage {
|
||||
|
||||
// 发送同意接听消息
|
||||
void sendTalkAcceptMessage() async {
|
||||
if (talkStatus.status == TalkStatus.duringCall) {
|
||||
_log(text: '已经在通话中,请勿重复发送同意接听消息');
|
||||
return;
|
||||
}
|
||||
if (talkStatus.status != TalkStatus.waitingAnswer) {
|
||||
_log(text: '当前未处于等待接听状态, 无法发送同意接听消息');
|
||||
return;
|
||||
}
|
||||
final message = MessageCommand.talkAcceptMessage(
|
||||
ToPeerId: ToPeerId,
|
||||
FromPeerId: FromPeerId,
|
||||
MessageId: MessageCommand.getNextMessageId(ToPeerId, increment: true),
|
||||
);
|
||||
await _sendMessage(message: message);
|
||||
// 设置状态为等待接听
|
||||
talkStatus.setWaitingAnswer();
|
||||
// _log(text: '发送同意接听消息');
|
||||
stopTalkExpectMessageTimer();
|
||||
}
|
||||
|
||||
// 发送拒绝接听消息
|
||||
@ -400,6 +404,11 @@ class StartChartManage {
|
||||
StartChartTalkStatus.instance.setRejected();
|
||||
// 停止播放铃声
|
||||
AudioPlayerManager().stopRingtone();
|
||||
// 停止发送通话保持消息、通话预期数据请求
|
||||
stopTalkExpectMessageTimer();
|
||||
stopTalkPingMessageTimer();
|
||||
// 取消定时器
|
||||
talkePingOverTimeTimerManager.cancel();
|
||||
}
|
||||
|
||||
// 发送期望接受消息
|
||||
@ -456,7 +465,7 @@ class StartChartManage {
|
||||
|
||||
// 发送通话中挂断消息
|
||||
Future<void> sendTalkHangupMessage() async {
|
||||
if (talkStatus.status != TalkStatus.duringCall) {
|
||||
if (talkStatus.status != TalkStatus.answeredSuccessfully) {
|
||||
_log(text: '当前未处于接听状态, 无法发送通话中挂断消息');
|
||||
return;
|
||||
}
|
||||
@ -471,6 +480,11 @@ class StartChartManage {
|
||||
StartChartTalkStatus.instance.setHangingUpDuring();
|
||||
// 停止播放铃声
|
||||
AudioPlayerManager().stopRingtone();
|
||||
// 停止发送通话保持消息、通话预期数据请求
|
||||
stopTalkExpectMessageTimer();
|
||||
stopTalkPingMessageTimer();
|
||||
// 取消定时器
|
||||
talkePingOverTimeTimerManager.cancel();
|
||||
}
|
||||
|
||||
// 重新上线
|
||||
@ -799,17 +813,21 @@ class StartChartManage {
|
||||
/// 获取公钥
|
||||
Future<String> getPublicKey() async {
|
||||
// 从缓存中获取星图注册节点信息
|
||||
final StarChartRegisterNodeEntity? starChartRegisterNodeInfo =
|
||||
await Storage.getStarChartRegisterNodeInfo();
|
||||
return starChartRegisterNodeInfo?.peer?.publicKey ?? '';
|
||||
// final StarChartRegisterNodeEntity? starChartRegisterNodeInfo =
|
||||
// await Storage.getStarChartRegisterNodeInfo();
|
||||
// return starChartRegisterNodeInfo?.peer?.publicKey ?? '';
|
||||
final loginData = await Storage.getLoginData();
|
||||
return loginData?.starchart?.starchartPeerPublicKey ?? '';
|
||||
}
|
||||
|
||||
/// 获取私钥
|
||||
Future<String> getPrivateKey() async {
|
||||
// 从缓存中获取星图注册节点信息
|
||||
final StarChartRegisterNodeEntity? starChartRegisterNodeInfo =
|
||||
await Storage.getStarChartRegisterNodeInfo();
|
||||
return starChartRegisterNodeInfo?.peer?.privateKey ?? '';
|
||||
// final StarChartRegisterNodeEntity? starChartRegisterNodeInfo =
|
||||
// await Storage.getStarChartRegisterNodeInfo();
|
||||
// return starChartRegisterNodeInfo?.peer?.privateKey ?? '';
|
||||
final loginData = await Storage.getLoginData();
|
||||
return loginData?.starchart?.starchartPeerPrivateKey ?? '';
|
||||
}
|
||||
|
||||
// 接收返回的数据
|
||||
@ -895,6 +913,23 @@ class StartChartManage {
|
||||
);
|
||||
}
|
||||
|
||||
/// 通话期望数据定时器
|
||||
void startTalkAcceptTimer() {
|
||||
talkAcceptTimer ??= Timer.periodic(
|
||||
Duration(
|
||||
seconds: talkExpectIntervalTime,
|
||||
),
|
||||
(Timer timer) {
|
||||
sendTalkAcceptMessage();
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
void stopTalkAcceptTimer() {
|
||||
talkAcceptTimer?.cancel();
|
||||
talkAcceptTimer = null; // 清除定时器引用
|
||||
}
|
||||
|
||||
/// 通话数据定时器
|
||||
void startTalkDataTimer() async {
|
||||
// 如果已经启动了就不运行
|
||||
@ -1010,22 +1045,44 @@ class StartChartManage {
|
||||
}
|
||||
|
||||
/// 修改预期接收到的数据
|
||||
void changeTalkExpectDataType({required TalkExpectReq talkExpect}) {
|
||||
void changeTalkExpectDataTypeAndReStartTalkExpectMessageTimer(
|
||||
{required TalkExpectReq talkExpect}) {
|
||||
_defaultTalkExpect = talkExpect;
|
||||
reStartTalkExpectMessageTimer();
|
||||
}
|
||||
|
||||
/// 修改预期接收到的数据
|
||||
void sendOnlyImageVideoTalkExpectData() {
|
||||
final talkExpectReq = TalkExpectReq(
|
||||
videoType: [VideoTypeE.IMAGE],
|
||||
audioType: [],
|
||||
);
|
||||
changeTalkExpectDataTypeAndReStartTalkExpectMessageTimer(
|
||||
talkExpect: talkExpectReq);
|
||||
}
|
||||
|
||||
|
||||
/// 修改预期接收到的数据
|
||||
void sendImageVideoAndG711AudioTalkExpectData() {
|
||||
final talkExpectReq = TalkExpectReq(
|
||||
videoType: [VideoTypeE.IMAGE],
|
||||
audioType: [AudioTypeE.G711],
|
||||
);
|
||||
changeTalkExpectDataTypeAndReStartTalkExpectMessageTimer(
|
||||
talkExpect: talkExpectReq);
|
||||
}
|
||||
|
||||
/// 销毁资源
|
||||
void destruction() async {
|
||||
isOnlineStartChartServer = false;
|
||||
stopHeartbeat();
|
||||
stopTalkExpectMessageTimer();
|
||||
stopTalkPingMessageTimer();
|
||||
stopHeartbeat();
|
||||
stopReStartOnlineStartChartServer();
|
||||
stopTalkDataTimer();
|
||||
_resetData();
|
||||
// await Storage.removerRelayInfo();
|
||||
// await Storage.removerStarChartRegisterNodeInfo();
|
||||
await Storage.removerRelayInfo();
|
||||
await Storage.removerStarChartRegisterNodeInfo();
|
||||
}
|
||||
|
||||
void _resetData() {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user