fix:增加铃声、通话保持定时器

This commit is contained in:
liyi 2024-12-05 13:50:57 +08:00
parent 8f7ec774c1
commit a677def7f3
3 changed files with 168 additions and 9 deletions

View File

@ -0,0 +1,53 @@
import 'dart:async';
typedef TimeoutCallback = void Function();
class TalkPingOverTimeTimerManager {
//
TalkPingOverTimeTimerManager({required this.timeoutInSeconds});
// Timer
Timer? _timer;
// final
final int timeoutInSeconds;
//
static const int defaultTimeoutInSeconds = 5;
//
TimeoutCallback? _onTimeout;
//
void startTimer() {
_cancelTimer(); //
_timer = Timer(Duration(seconds: timeoutInSeconds), () {
//
_onTimeout?.call();
//
_cancelTimer();
});
}
//
void receiveMessage() {
print("Received a message, resetting the timer.");
startTimer();
}
//
void setOnTimeout(TimeoutCallback? callback) {
_onTimeout = callback;
}
//
void _cancelTimer() {
_timer?.cancel();
_timer = null;
}
//
void dispose() {
_cancelTimer();
}
}

View File

@ -1,8 +1,27 @@
import 'package:audioplayers/audioplayers.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/talk/other/audio_player_manager.dart';
import 'package:star_lock/talk/startChart/constant/udp_constant.dart';
import 'package:star_lock/talk/startChart/handle/other/talk_ping_overtime_timer_manger.dart';
import 'package:star_lock/talk/startChart/proto/generic.pb.dart';
import 'package:star_lock/talk/startChart/start_chart_manage.dart';
import 'package:star_lock/tools/storage.dart';
class ScpMessageBaseHandle {
final startChartManage = StartChartManage();
final audioManager = AudioPlayerManager();
//
final talkePingOverTimeTimerManager = TalkPingOverTimeTimerManager(
timeoutInSeconds: 5,
);
bool checkGenericRespSuccess(GenericResp genericResp) {
if (genericResp == null) return false;
final code = genericResp.code;
@ -14,4 +33,14 @@ class ScpMessageBaseHandle {
void log({required String text}) {
AppLog.log('==========${text}');
}
//
void playRingtone() async {
await audioManager.playRingtone();
}
//
void stopRingtone() async {
await audioManager.stopRingtone();
}
}

View File

@ -4,10 +4,8 @@ import 'dart:typed_data';
import 'package:convert/convert.dart';
import 'package:fast_rsa/fast_rsa.dart' as fastRsa;
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:get/get.dart';
import 'package:pointycastle/export.dart' as pc;
import 'package:star_lock/appRouters.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/flavors.dart';
import 'package:star_lock/network/start_chart_api.dart';
@ -15,17 +13,12 @@ import 'package:star_lock/talk/startChart/command/message_command.dart';
import 'package:star_lock/talk/startChart/constant/ip_constant.dart';
import 'package:star_lock/talk/startChart/constant/listen_addr_type_constant.dart';
import 'package:star_lock/talk/startChart/constant/payload_type_constant.dart';
import 'package:star_lock/talk/startChart/constant/udp_constant.dart';
import 'package:star_lock/talk/startChart/entity/heartbeat_response.dart';
import 'package:star_lock/talk/startChart/entity/login_response.dart';
import 'package:star_lock/talk/startChart/entity/relay_info_entity.dart';
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/handle/scp_message_handle.dart';
import 'package:star_lock/talk/startChart/handle/scp_message_handler_factory.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/tools/deviceInfo_utils.dart';
import 'package:star_lock/tools/storage.dart';
import 'package:uuid/uuid.dart';
@ -67,9 +60,13 @@ class StartChartManage {
bool isOnlineStartChartServer = false; // 线
int reStartOnlineStartChartServerIntervalTime = 1; // 线(s)
Timer? reStartOnlineStartChartServerTimer; // 线
int talkPingIntervalTime = 1; // (s)
Timer? talkPingTimer; //
String relayPeerId = ''; // peerId
bool _calling = false; //
//
Future<void> init() async {
if (isOnlineStartChartServer && _udpSocket != null) {
@ -122,6 +119,16 @@ class StartChartManage {
}
}
///
bool checkIsCalling() {
return _calling;
}
///
void changeCallingStatus(bool status) {
_calling = status;
}
// udp
Future<void> _onlineRelayService() async {
var addressIListenFrom = InternetAddress.anyIPv4;
@ -211,9 +218,57 @@ class StartChartManage {
await _sendMessage(message: message);
}
//
void sendTalkPingMessage(
//
void sendTalkAcceptMessage(
{required String ToPeerId, required int gatewayId}) async {
final message = MessageCommand.talkAcceptMessage(
ToPeerId: ToPeerId,
FromPeerId: FromPeerId,
);
await _sendMessage(message: message);
}
//
void sendTalkRejectMessage({
required String ToPeerId,
required int gatewayId,
}) async {
final message = MessageCommand.talkRejectMessage(
ToPeerId: ToPeerId,
FromPeerId: FromPeerId,
);
await _sendMessage(message: message);
}
//
void sendGenericRespSuccessMessage(
{required String ToPeerId,
required String FromPeerId,
required int PayloadType}) async {
final message = MessageCommand.genericRespSuccessMessage(
ToPeerId: ToPeerId,
FromPeerId: FromPeerId,
PayloadType: PayloadType,
);
await _sendMessage(message: message);
}
//
void sendGenericRespErrorMessage(
{required String ToPeerId,
required String FromPeerId,
required int PayloadType}) async {
final message = MessageCommand.genericRespErrorMessage(
ToPeerId: ToPeerId,
FromPeerId: FromPeerId,
PayloadType: PayloadType,
);
await _sendMessage(message: message);
}
//
Future<void> sendTalkPingMessage(
{required String ToPeerId, required String FromPeerId}) async {
final message = MessageCommand.talkPingMessage(
ToPeerId: ToPeerId,
FromPeerId: FromPeerId,
@ -597,4 +652,26 @@ class StartChartManage {
_log(text: '❌ 处理udp返回数据时遇到错误---> $e');
}
}
///
void startTalkPingMessageTimer() {
talkPingTimer ??= Timer.periodic(
Duration(
seconds: talkPingIntervalTime,
),
(Timer timer) async {
// 线
await sendTalkPingMessage(
ToPeerId: ToPeerId,
FromPeerId: FromPeerId,
);
},
);
}
//
void stopTalkPingMessageTimer() {
talkPingTimer?.cancel();
talkPingTimer = null; //
}
}