From 62b95c6d88e96c286d5b4f9ca5b3278fba2a3d47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AD=8F=E5=B0=91=E9=98=B3?= <786612630@qq.com> Date: Thu, 21 Dec 2023 10:21:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=AF=B9=E8=AE=B2=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../images/main/icon_lockDetail_hangUp.png | Bin 0 -> 2020 bytes .../icon_lockDetail_monitoringAnswerCalls.png | Bin 0 -> 3027 bytes .../icon_lockDetail_monitoringUnTalkback.png | Bin 0 -> 2941 bytes star_lock/lib/main.dart | 8 -- .../monitoring/lockMonitoring_logic.dart | 11 ++ .../monitoring/lockMonitoring_page.dart | 133 +++++++++++++++++- .../monitoring/lockMonitoring_state.dart | 5 +- star_lock/lib/talk/call/callTalk.dart | 1 + .../udp/io_protocol/udp_mainProtocol.dart | 4 +- star_lock/lib/talk/udp/udp_help.dart | 25 ++-- star_lock/lib/talk/udp/udp_manage.dart | 12 +- star_lock/lib/talk/udp/udp_reciverData.dart | 31 +++- star_lock/lib/talk/udp/udp_senderManage.dart | 4 +- star_lock/lib/talk/udp/udp_talkClass.dart | 17 ++- star_lock/lib/tools/eventBusEventManage.dart | 6 + star_lock/lib/tools/storage.dart | 4 +- 16 files changed, 222 insertions(+), 39 deletions(-) create mode 100644 star_lock/images/main/icon_lockDetail_hangUp.png create mode 100644 star_lock/images/main/icon_lockDetail_monitoringAnswerCalls.png create mode 100644 star_lock/images/main/icon_lockDetail_monitoringUnTalkback.png diff --git a/star_lock/images/main/icon_lockDetail_hangUp.png b/star_lock/images/main/icon_lockDetail_hangUp.png new file mode 100644 index 0000000000000000000000000000000000000000..5c3e9a8c5911bd5aae6458272bd2eb751bc6037d GIT binary patch literal 2020 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 literal 0 HcmV?d00001 diff --git a/star_lock/images/main/icon_lockDetail_monitoringUnTalkback.png b/star_lock/images/main/icon_lockDetail_monitoringUnTalkback.png new file mode 100644 index 0000000000000000000000000000000000000000..e97963ab2623e3f69a45821393f034fede09bd4a GIT binary patch literal 2941 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 jPpA with WidgetsBindingObserver, BaseWidget { initAliyunPush(); - // playLocalAudio(); - // Uint8List uint8List = Uint8List.fromList([]); // CallTalk talkClass = CallTalk(); // talkClass.getAVData(uint8List, 90); @@ -192,9 +190,3 @@ Future _setCommonServices() async { // Get.log(PlatformInfoService.to.info.version); } -//播放本地音频 -void playLocalAudio() async { - final audioPlayer = AudioPlayer(); - audioPlayer.setReleaseMode(ReleaseMode.loop); - await audioPlayer.play(AssetSource('ring1.mp3')); -} diff --git a/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_logic.dart b/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_logic.dart index 8efa1e76..208c134e 100644 --- a/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_logic.dart +++ b/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_logic.dart @@ -17,6 +17,15 @@ class LockMonitoringLogic extends BaseGetXController { }); } + /// 收到接听状态 + StreamSubscription? _getUDPStatusRefreshUIEvent; + void _getUDPStatusRefreshUIAction() { + // 蓝牙协议通知传输跟蓝牙之外的数据传输类不一样 eventBus + _getTVDataRefreshUIEvent = eventBus.on().listen((event) { + state.udpStatus.value = event.udpStatus; + }); + } + @override void onReady() { // TODO: implement onReady @@ -24,6 +33,7 @@ class LockMonitoringLogic extends BaseGetXController { print("onReady()"); _getTVDataRefreshUIAction(); + _getUDPStatusRefreshUIAction(); } @override @@ -38,6 +48,7 @@ class LockMonitoringLogic extends BaseGetXController { // TODO: implement onClose print("锁详情界面销毁了"); _getTVDataRefreshUIEvent!.cancel(); + _getUDPStatusRefreshUIEvent!.cancel(); } } \ No newline at end of file diff --git a/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_page.dart b/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_page.dart index 4bb5d31c..e26d8869 100644 --- a/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_page.dart +++ b/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_page.dart @@ -2,9 +2,15 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; +import 'package:network_info_plus/network_info_plus.dart'; import '../../../../appRouters.dart'; import '../../../../app_settings/app_colors.dart'; +import '../../../../talk/udp/udp_manage.dart'; +import '../../../../talk/udp/udp_senderManage.dart'; +import '../../../../tools/showTFView.dart'; +import '../../../../tools/storage.dart'; +import '../../../../tools/toast.dart'; import 'lockMonitoring_logic.dart'; class LockMonitoringPage extends StatefulWidget { @@ -142,19 +148,97 @@ class _LockMonitoringPageState extends State { } Widget bottomBottomBtnWidget() { - return Row(mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ - bottomBtnItemWidget("images/main/icon_lockDetail_monitoringTalkback.png", - "点击对讲", Colors.white, () {}), - bottomBtnItemWidget("images/main/icon_lockDetail_monitoringUnlock.png", - "长按开锁", AppColors.mainColor, () {}) + return Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Obx(() => bottomBtnItemWidget(getAnswerBtnImg(), getAnswerBtnName(), Colors.white, () async { + var userMobileIP = await NetworkInfo().getWifiIP(); + var userMobile = await Storage.getMobile(); + + // 刚进来是接听状态,然后改为长按对讲 + UDPSenderManage.sendMainProtocol( + command: 150, + commandTypeIsCalling: 1, + subCommand: 6, + lockID: UDPManage().lockId, + lockIP: UDPManage().host, + userMobile: userMobile, + userMobileIP: userMobileIP, + endData: []); + })), + bottomBtnItemWidget("images/main/icon_lockDetail_hangUp.png", "挂断", Colors.red, () async { + var userMobileIP = await NetworkInfo().getWifiIP(); + var userMobile = await Storage.getMobile(); + + // 挂断 + UDPSenderManage.sendMainProtocol( + command: 150, + commandTypeIsCalling: 1, + subCommand: 30, + lockID: UDPManage().lockId, + lockIP: UDPManage().host, + userMobile: userMobile, + userMobileIP: userMobileIP, + endData: []); + }), + bottomBtnItemWidget("images/main/icon_lockDetail_monitoringUnlock.png", "开锁", AppColors.mainColor, () { + showDeletPasswordAlertDialog(context); + }) + ]); } + String getAnswerBtnImg(){ + switch (state.udpStatus.value) { + case 8: + { + return "images/main/icon_lockDetail_monitoringUnTalkback.png"; + } + case 9: + { + return "images/main/icon_lockDetail_monitoringTalkback.png"; + } + default: + { + return "images/main/icon_lockDetail_monitoringAnswerCalls.png"; + } + } + } + + String getAnswerBtnName(){ + switch (state.udpStatus.value) { + case 8: + { + return "长按说话"; + } + case 9: + { + return "松开发送"; + } + default: + { + return "接听"; + } + } + } + Widget bottomBtnItemWidget( String iconUrl, String name, Color backgroundColor, Function() onClick) { var wh = 80.w; return GestureDetector( onTap: onClick, + onLongPress: (){ + print("onLongPress"); + if(state.udpStatus.value == 8){ + state.udpStatus.value = 9; + } + }, + onLongPressUp: () { + print("onLongPressUp"); + if(state.udpStatus.value == 9){ + state.udpStatus.value = 8; + } + }, child: SizedBox( height: 140.h, child: Column( @@ -178,4 +262,43 @@ class _LockMonitoringPageState extends State { )), ); } + + void showDeletPasswordAlertDialog(BuildContext context) { + showDialog( + barrierDismissible:false, + context: context, + builder: (BuildContext context) { + return ShowTFView( + title: "请输入开锁密码", + tipTitle: "", + controller: state.passwordTF, + sureClick: () async { + //发送删除锁请求 + if (state.passwordTF.text.isEmpty) { + Toast.show(msg: "请输入开锁密码"); + return; + } + + var userMobileIP = await NetworkInfo().getWifiIP(); + var userMobile = await Storage.getMobile(); + + // 开锁 + UDPSenderManage.sendMainProtocol( + command: 150, + commandTypeIsCalling: 1, + subCommand: 10, + lockID: UDPManage().lockId, + lockIP: UDPManage().host, + userMobile: userMobile, + userMobileIP: userMobileIP, + endData: []); + Get.back(); + }, + cancelClick: () { + Get.back(); + }, + ); + }, + ); + } } diff --git a/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_state.dart b/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_state.dart index ed1135ca..71390d4b 100644 --- a/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_state.dart +++ b/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_state.dart @@ -1,10 +1,13 @@ import 'dart:typed_data'; +import 'package:flutter/material.dart'; import 'package:get/get.dart'; class LockMonitoringState { - var isOpenVoice = false.obs; + var isOpenVoice = false.obs; + var udpStatus = 0.obs; //0:初始状态 1:等待监视 2: 3:监视中 4:呼叫成功 5:主角通话中 6:被叫通话 8:被叫通话中 9:长按说话 + var passwordTF = TextEditingController(); var listData = [].obs; Uint8List imageData = Uint8List.fromList([ diff --git a/star_lock/lib/talk/call/callTalk.dart b/star_lock/lib/talk/call/callTalk.dart index 2801f857..0453e373 100644 --- a/star_lock/lib/talk/call/callTalk.dart +++ b/star_lock/lib/talk/call/callTalk.dart @@ -57,6 +57,7 @@ class CallTalk { // 用你的711音频数据替换这里的Uint8List Uint8List rawData = G711Decoder().decodeG711uLaw(bb); _playRawData(rawData); + print('收到音频数据了'); } // 视频数据 else { diff --git a/star_lock/lib/talk/udp/io_protocol/udp_mainProtocol.dart b/star_lock/lib/talk/udp/io_protocol/udp_mainProtocol.dart index 8fb2fada..add59504 100644 --- a/star_lock/lib/talk/udp/io_protocol/udp_mainProtocol.dart +++ b/star_lock/lib/talk/udp/io_protocol/udp_mainProtocol.dart @@ -16,7 +16,7 @@ class UDPMainProtocolCommand extends UDPSenderProtocol { String? lockIP; String? userMobile; String? userMobileIP; - List? data; + List? endData; UDPMainProtocolCommand({ this.command, @@ -26,7 +26,7 @@ class UDPMainProtocolCommand extends UDPSenderProtocol { this.lockIP, this.userMobile, this.userMobileIP, - this.data, + this.endData, }) : super(CommandUDPType.heart); @override diff --git a/star_lock/lib/talk/udp/udp_help.dart b/star_lock/lib/talk/udp/udp_help.dart index c6bea328..619c3c21 100644 --- a/star_lock/lib/talk/udp/udp_help.dart +++ b/star_lock/lib/talk/udp/udp_help.dart @@ -12,36 +12,39 @@ import 'udp_senderManage.dart'; class UdpHelp{ + Timer? timer; openUDP() async { // 从服务器获取ip跟端口 var entity = await ApiRepository.to.getWifiLockServiceIpAndPort(); if(entity.errorCode! == 0){ UDPManage(); // UDPManage().initUdp(); - // UDPManage().host = entity.data!.serviceList![0].serviceIp!; - // UDPManage().port = int.parse(entity.data!.serviceList![0].port!); + UDPManage().port = int.parse(entity.data!.serviceList![0].port!); var serversList = []; for(int i = 0; i addresses = await InternetAddress.lookup(item.serviceIp!); + UDPManage().host = addresses.first.address; var itemList = addresses.first.address.split("."); for (var element in itemList) { serversList.add(int.parse(element)); } - print('Resolved google.com to address: ${addresses.first.address} serversList:${serversList}'); + print('Resolved google.com to address: ${addresses.first.address} serversList:$serversList'); } } - Timer timer = Timer.periodic(1.seconds, (timer) async { + var mobile = await Storage.getMobile(); + timer = Timer.periodic(1.seconds, (timer) async { UDPSenderManage.sendHeart( - userName: await Storage.getMobile(), + userName: mobile, ipList: serversList, tokenStr: "b989fa15f75c2ac02718b7c9bb64f80e", ); @@ -49,11 +52,15 @@ class UdpHelp{ } } - Future getWifiLockServiceIpAndPort() async { - var entity = await ApiRepository.to.getWifiLockServiceIpAndPort(); - if(entity.errorCode! == 0){ + // Future getWifiLockServiceIpAndPort() async { + // var entity = await ApiRepository.to.getWifiLockServiceIpAndPort(); + // if(entity.errorCode! == 0){ + // + // } + // } - } + dispose(){ + timer!.cancel(); } } diff --git a/star_lock/lib/talk/udp/udp_manage.dart b/star_lock/lib/talk/udp/udp_manage.dart index 573dedfd..98d27c9f 100644 --- a/star_lock/lib/talk/udp/udp_manage.dart +++ b/star_lock/lib/talk/udp/udp_manage.dart @@ -1,5 +1,4 @@ - import 'dart:async'; import 'dart:io'; @@ -31,16 +30,18 @@ class UDPManage{ StreamSubscription? _streamSubscription; RawDatagramSocket? _udpSocket; - String host = '47.106.143.213'; - int port = 8056; + // String host = '47.106.143.213'; + // int port = 8056; // String? _mIp = ''; - // String host = ''; - // int port = 0; + String host = ''; + int port = 0; + String lockId = '';// 锁id 通过锁id来判断是哪把锁发对讲过来 void initUdp() async { var listAddress = InternetAddress.lookup(host!); listAddress.then((list) { list.forEach((element) { + // print('Udp ----> element.address:${element.address} element.host:${element.host}'); host = element.address; }); }); @@ -52,6 +53,7 @@ class UDPManage{ print('❌ Udp ----> _port == 0'); return; } + print('Udp ----> host:$host port:$port'); var addressIListenFrom = InternetAddress.anyIPv4; int portIListenOn = 62288; RawDatagramSocket.bind(addressIListenFrom, portIListenOn).then((RawDatagramSocket socket){ diff --git a/star_lock/lib/talk/udp/udp_reciverData.dart b/star_lock/lib/talk/udp/udp_reciverData.dart index 129cbb48..4b850c74 100644 --- a/star_lock/lib/talk/udp/udp_reciverData.dart +++ b/star_lock/lib/talk/udp/udp_reciverData.dart @@ -1,5 +1,10 @@ import 'dart:typed_data'; +import 'package:get/get.dart'; +import 'package:star_lock/talk/udp/udp_manage.dart'; + +import '../../blue/io_tool/io_tool.dart'; +import '../../tools/eventBusEventManage.dart'; import '../../tools/toast.dart'; import '../call/callTalk.dart'; import 'udp_talkClass.dart'; @@ -14,7 +19,7 @@ class CommandUDPReciverManager { if (dataSize < 4) { return; } - print("appDataReceiveUDPData:$data"); + // print("appReceiveUDPData:$data"); Uint8List data1 = Uint8List.fromList(data); if (data1.length == 1) { @@ -26,6 +31,7 @@ class CommandUDPReciverManager { if (data[6] == 4) { if (data[7] == 2) { // print("心跳包反馈 在线状态"); + } else if (data[7] == 3) { [Toast.show(msg: "您已在其他设备登录")]; } @@ -42,6 +48,11 @@ class CommandUDPReciverManager { case 1: { //被叫 + // lockId + var lockId = data.sublist(9, 29); + var lockIdStr = utf8String(lockId); + UDPManage().lockId = lockIdStr; + UDPTalkClass().beCallW(data: data); } break; @@ -51,6 +62,10 @@ class CommandUDPReciverManager { if ((data[7] & 0x3) == 2) { //被叫 接听反馈 print("接听反馈"); + UDPTalkClass().status = 8; + // 停止声音 + UDPTalkClass().stopLocalAudio(); + eventBus.fire(GetUDPStatusRefreshUI(UDPTalkClass().status)); } } break; @@ -77,21 +92,29 @@ class CommandUDPReciverManager { case 10: { //开门反馈 + print("appReceiveUDPData:$data"); if ((data[7] & 0x3) == 2) { print("开门成功"); - } else {} + Toast.show(msg: "开门成功"); + } else { + print("开门失败"); + } } break; case 30: { - //开门反馈 + // 挂断 if ((data[7] & 0x3) == 1) { - //对方结束对讲 + // 对方结束对讲 print("对方结束对讲"); } else { //结束对讲反馈 print("结束对讲反馈"); } + UDPTalkClass().status = 0; + Get.back(); + UDPTalkClass().stopLocalAudio(); + eventBus.fire(GetUDPStatusRefreshUI(UDPTalkClass().status)); } break; case 140: diff --git a/star_lock/lib/talk/udp/udp_senderManage.dart b/star_lock/lib/talk/udp/udp_senderManage.dart index 4b15d39d..5899a888 100644 --- a/star_lock/lib/talk/udp/udp_senderManage.dart +++ b/star_lock/lib/talk/udp/udp_senderManage.dart @@ -24,7 +24,7 @@ class UDPSenderManage { String? lockIP, String? userMobile, String? userMobileIP, - List? data, + List? endData, CommandUDPSendCallBack? callBack}) { CommandUDPSenderManager().managerSendData(command: UDPMainProtocolCommand( command: command, @@ -34,7 +34,7 @@ class UDPSenderManage { lockIP: lockIP, userMobile: userMobile, userMobileIP: userMobileIP, - data: data, + endData: endData, ), callBack: callBack); } diff --git a/star_lock/lib/talk/udp/udp_talkClass.dart b/star_lock/lib/talk/udp/udp_talkClass.dart index 05d0739b..737eef48 100644 --- a/star_lock/lib/talk/udp/udp_talkClass.dart +++ b/star_lock/lib/talk/udp/udp_talkClass.dart @@ -1,6 +1,7 @@ import 'dart:async'; +import 'package:audioplayers/audioplayers.dart'; import 'package:fast_gbk/fast_gbk.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -21,11 +22,12 @@ class UDPTalkClass{ UDPTalkClass._init(); - var status = 0;// 0空闲 + var status = 0; //0:初始状态 1:等待监视 2: 3:监视中 4:呼叫成功 5:主角通话中 6:被叫通话 8:被叫通话中 var remoteEquid;// 手机号 late Timer timer; // 该字段是为了判断是否跳转到接听界面 挂断或者退出接听界面要记得变更状态 var isBeCall = false; + final audioPlayer = AudioPlayer(); beCallW({List? data, String? ip, int? port}) async { // print("beCall"); @@ -70,6 +72,7 @@ class UDPTalkClass{ Get.toNamed(Routers.lockMonitoringPage, arguments: { "lockId": "111" }); + playLocalAudio(); }else{ // 忙 @@ -111,4 +114,16 @@ class UDPTalkClass{ return equid; } + + //播放本地音频 + void playLocalAudio() async { + audioPlayer.setReleaseMode(ReleaseMode.loop); + await audioPlayer.play(AssetSource('ring1.mp3')); + } + + // 停止播放本地音频 + void stopLocalAudio() async { + audioPlayer.setReleaseMode(ReleaseMode.loop); + await audioPlayer.stop(); + } } \ No newline at end of file diff --git a/star_lock/lib/tools/eventBusEventManage.dart b/star_lock/lib/tools/eventBusEventManage.dart index 7958e493..25a8d62e 100644 --- a/star_lock/lib/tools/eventBusEventManage.dart +++ b/star_lock/lib/tools/eventBusEventManage.dart @@ -60,4 +60,10 @@ class LockSetChangeSetRefreshLockDetailWithType{ class GetTVDataRefreshUI{ List tvList; GetTVDataRefreshUI(this.tvList); +} + +/// 获取到UDP接收状态然后刷新界面 +class GetUDPStatusRefreshUI{ + int udpStatus; + GetUDPStatusRefreshUI(this.udpStatus); } \ No newline at end of file diff --git a/star_lock/lib/tools/storage.dart b/star_lock/lib/tools/storage.dart index 7a1b0d38..6de0fe52 100644 --- a/star_lock/lib/tools/storage.dart +++ b/star_lock/lib/tools/storage.dart @@ -141,7 +141,7 @@ class Storage { if (data != null && data.isNotEmpty) { uid = LoginData.fromJson(jsonDecode(data)).uid.toString(); } - print("pubUid:$uid"); + // print("pubUid:$uid"); return uid; } @@ -151,7 +151,7 @@ class Storage { if (data != null && data.isNotEmpty) { mobile = LoginData.fromJson(jsonDecode(data)).mobile.toString(); } - print("pubUserId:$mobile"); + // print("mobile:$mobile"); return mobile; }