diff --git a/lib/login/login/starLock_login_page.dart b/lib/login/login/starLock_login_page.dart index 3e078688..bf82431a 100755 --- a/lib/login/login/starLock_login_page.dart +++ b/lib/login/login/starLock_login_page.dart @@ -4,6 +4,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:star_lock/flavors.dart'; import 'package:star_lock/login/login/starLock_login_state.dart'; +import 'package:star_lock/talk/startChart/handle/impl/udp_talk_ping_handler.dart'; import 'package:star_lock/talk/startChart/start_chart_manage.dart'; import 'package:star_lock/tools/appFirstEnterHandle.dart'; import 'package:star_lock/tools/wechat/customer_tool.dart'; @@ -250,6 +251,18 @@ class _StarLockLoginPageState extends State { ); }, ), + SubmitBtn( + btnName: '播放铃声', + onClick: () { + UdpTalkPingHandler().playRingtone(); + }, + ), + SubmitBtn( + btnName: '停止播放铃声', + onClick: () { + UdpTalkPingHandler().stopRingtone(); + }, + ), SizedBox(height: 50.w), Row( mainAxisAlignment: MainAxisAlignment.center, diff --git a/lib/talk/startChart/handle/impl/udp_call_request_handler.dart b/lib/talk/startChart/handle/impl/udp_call_request_handler.dart deleted file mode 100644 index 48298d9e..00000000 --- a/lib/talk/startChart/handle/impl/udp_call_request_handler.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'package:flutter_easyloading/flutter_easyloading.dart'; -import 'package:get/get.dart'; -import 'package:star_lock/appRouters.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'; -import 'package:star_lock/talk/startChart/proto/gateway_reset.pb.dart'; -import 'package:star_lock/talk/startChart/proto/generic.pb.dart'; - -import '../../start_chart_manage.dart'; - -class UdpCallRequestHandler extends ScpMessageBaseHandle - implements ScpMessageHandler { - @override - void handle(ScpMessage scpMessage) { - final GenericResp genericResp = scpMessage.Payload; - if (checkGenericRespSuccess(genericResp)) { - // 收到呼叫请求,跳转到接听页面 - Get.toNamed( - Routers.lockMonitoringPage, - arguments: {'lockId': '111'}, - ); - } - } -} diff --git a/lib/talk/startChart/handle/impl/udp_heart_beat_handler.dart b/lib/talk/startChart/handle/impl/udp_heart_beat_handler.dart index fb894e7a..9454ce96 100644 --- a/lib/talk/startChart/handle/impl/udp_heart_beat_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_heart_beat_handler.dart @@ -10,7 +10,6 @@ import '../../start_chart_manage.dart'; class UdpHeartBeatHandler extends ScpMessageBaseHandle implements ScpMessageHandler { @override void handle(ScpMessage scpMessage) { - final startChartManage = StartChartManage(); final HeartbeatResponse heartbeatResponse = scpMessage.Payload; final statusCode = heartbeatResponse.statusCode; if (statusCode != null && diff --git a/lib/talk/startChart/handle/impl/udp_talk_accept_handler.dart b/lib/talk/startChart/handle/impl/udp_talk_accept_handler.dart index 1eb4833a..e9d4dbe6 100644 --- a/lib/talk/startChart/handle/impl/udp_talk_accept_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_talk_accept_handler.dart @@ -14,8 +14,21 @@ class UdpTalkAcceptHandler extends ScpMessageBaseHandle void handle(ScpMessage scpMessage) { final GenericResp genericResp = scpMessage.Payload; if (checkGenericRespSuccess(genericResp)) { - // TODO 同意接听 - // TODO 启动发送通话保持 + // 同意接听 + // 回复成功消息 + startChartManage.sendGenericRespSuccessMessage( + ToPeerId: scpMessage.FromPeerId!, + FromPeerId: scpMessage.ToPeerId!, + PayloadType: scpMessage.PayloadType!, + ); + // 启动通话保持 + startChartManage.startTalkPingMessageTimer(); + // 启动通话保持监听定时器 + talkePingOverTimeTimerManager.startTimer(); + // 设置通话保持超时后的事件 + talkePingOverTimeTimerManager.setOnTimeout(() { + EasyLoading.showToast('通话异常中断', duration: 2000.milliseconds); + }); } } } diff --git a/lib/talk/startChart/handle/impl/udp_talk_ping_handler.dart b/lib/talk/startChart/handle/impl/udp_talk_ping_handler.dart index eef0529d..5c8c987c 100644 --- a/lib/talk/startChart/handle/impl/udp_talk_ping_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_talk_ping_handler.dart @@ -1,12 +1,8 @@ -import 'package:flutter_easyloading/flutter_easyloading.dart'; -import 'package:get/get.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'; -import 'package:star_lock/talk/startChart/proto/gateway_reset.pb.dart'; -import 'package:star_lock/talk/startChart/proto/generic.pb.dart'; -import '../../start_chart_manage.dart'; +import 'package:star_lock/talk/startChart/proto/generic.pb.dart'; class UdpTalkPingHandler extends ScpMessageBaseHandle implements ScpMessageHandler { @@ -14,7 +10,10 @@ class UdpTalkPingHandler extends ScpMessageBaseHandle void handle(ScpMessage scpMessage) { final GenericResp genericResp = scpMessage.Payload; if (checkGenericRespSuccess(genericResp)) { - // TODO 呼叫保持 + // 收到消息 + talkePingOverTimeTimerManager.receiveMessage(); + // 修改状态 + startChartManage.changeCallingStatus(true); } } diff --git a/lib/talk/startChart/handle/impl/udp_talk_request_handler.dart b/lib/talk/startChart/handle/impl/udp_talk_request_handler.dart new file mode 100644 index 00000000..c174fa16 --- /dev/null +++ b/lib/talk/startChart/handle/impl/udp_talk_request_handler.dart @@ -0,0 +1,61 @@ +import 'package:flutter_easyloading/flutter_easyloading.dart'; +import 'package:flutter_local_notifications/flutter_local_notifications.dart'; +import 'package:get/get.dart'; +import 'package:star_lock/appRouters.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'; +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/storage.dart'; + +import '../../start_chart_manage.dart'; + +class UdpTalkRequestHandler extends ScpMessageBaseHandle + implements ScpMessageHandler { + @override + void handle(ScpMessage scpMessage) { + final GenericResp genericResp = scpMessage.Payload; + if (checkGenericRespSuccess(genericResp)) { + // 回复成功消息 + startChartManage.sendGenericRespSuccessMessage( + ToPeerId: scpMessage.FromPeerId!, + FromPeerId: scpMessage.ToPeerId!, + PayloadType: scpMessage.PayloadType!, + ); + // 处理收到接听请求后的事件 + _talkRequestEvent(); + } + } + + // 来电事件的处理 + void _talkRequestEvent() { + playRingtone(); + _showTalkRequestNotification(); + // 收到呼叫请求,跳转到接听页面 + Get.toNamed( + Routers.lockMonitoringPage, + arguments: {'lockId': '111'}, + ); + } + + // 收到来电请求时进行本地通知 + Future _showTalkRequestNotification() async { + const AndroidNotificationDetails androidPlatformChannelSpecifics = + AndroidNotificationDetails('1', 'flutter_channel', + importance: Importance.max, + priority: Priority.high, + playSound: true, + ticker: 'ticker'); + const NotificationDetails platformChannelSpecifics = + NotificationDetails(android: androidPlatformChannelSpecifics); + // 获取锁名 + String? getLockName = await Storage.getString(saveLockAlias); + final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = + FlutterLocalNotificationsPlugin(); + // 执行本地通知 + await flutterLocalNotificationsPlugin.show(0, '呼叫提醒'.tr, + '${'收到来自'.tr}($getLockName)${'锁的呼叫'.tr}。', platformChannelSpecifics, + payload: 'item x'); + } +} diff --git a/lib/talk/startChart/handle/scp_message_handler_factory.dart b/lib/talk/startChart/handle/scp_message_handler_factory.dart index 51766b91..f9b35582 100644 --- a/lib/talk/startChart/handle/scp_message_handler_factory.dart +++ b/lib/talk/startChart/handle/scp_message_handler_factory.dart @@ -1,6 +1,6 @@ import 'package:star_lock/talk/startChart/constant/payload_type_constant.dart'; import 'package:star_lock/talk/startChart/handle/impl/udp_ble_passthrough_handler.dart'; -import 'package:star_lock/talk/startChart/handle/impl/udp_call_request_handler.dart'; +import 'package:star_lock/talk/startChart/handle/impl/udp_talk_request_handler.dart'; import 'package:star_lock/talk/startChart/handle/impl/udp_echo_test_handler.dart'; import 'package:star_lock/talk/startChart/handle/impl/udp_gateway_reset_handler.dart'; import 'package:star_lock/talk/startChart/handle/impl/udp_gateway_transfer_handler.dart'; @@ -39,7 +39,7 @@ class ScpMessageHandlerFactory { case PayloadTypeConstant.talkReceiverTransfer: return UdpTalkReceiverTransferHandler(); case PayloadTypeConstant.callRequest: - return UdpCallRequestHandler(); + return UdpTalkRequestHandler(); case PayloadTypeConstant.talkPush: return UdpTalkPushHandler(); case PayloadTypeConstant.talkReject: