2023-12-11 13:44:15 +08:00
|
|
|
|
import 'dart:async';
|
|
|
|
|
|
import 'dart:io';
|
|
|
|
|
|
|
|
|
|
|
|
import 'package:get/get.dart';
|
2024-08-21 18:31:19 +08:00
|
|
|
|
import 'package:star_lock/main/lockDetail/lockSet/configuringWifi/configuringWifi/configuringWifiEntity.dart';
|
2023-12-11 13:44:15 +08:00
|
|
|
|
|
2024-11-25 11:07:29 +08:00
|
|
|
|
import '../../app_settings/app_settings.dart';
|
2023-12-11 13:44:15 +08:00
|
|
|
|
import '../../network/api_repository.dart';
|
2023-12-20 13:43:41 +08:00
|
|
|
|
import '../../tools/storage.dart';
|
2023-12-11 13:44:15 +08:00
|
|
|
|
import 'udp_manage.dart';
|
|
|
|
|
|
import 'udp_senderManage.dart';
|
|
|
|
|
|
|
2023-12-20 16:52:18 +08:00
|
|
|
|
class UdpHelp {
|
2024-01-08 11:32:35 +08:00
|
|
|
|
Timer? udpHeartTimer;
|
2023-12-21 10:32:10 +08:00
|
|
|
|
|
2023-12-11 13:44:15 +08:00
|
|
|
|
openUDP() async {
|
|
|
|
|
|
// 从服务器获取ip跟端口
|
2024-11-25 11:07:29 +08:00
|
|
|
|
final ConfiguringWifiEntity entity =
|
|
|
|
|
|
await ApiRepository.to.getWifiLockServiceIpAndPort();
|
2023-12-20 16:52:18 +08:00
|
|
|
|
if (entity.errorCode! == 0) {
|
2023-12-11 13:44:15 +08:00
|
|
|
|
UDPManage();
|
|
|
|
|
|
// UDPManage().initUdp();
|
2023-12-21 10:21:25 +08:00
|
|
|
|
UDPManage().port = int.parse(entity.data!.serviceList![0].port!);
|
2023-12-11 13:44:15 +08:00
|
|
|
|
|
2024-08-21 18:31:19 +08:00
|
|
|
|
final List<int> serversList = <int>[];
|
2023-12-20 16:52:18 +08:00
|
|
|
|
for (int i = 0; i < entity.data!.serviceList!.length; i++) {
|
2024-08-21 18:31:19 +08:00
|
|
|
|
final ServiceList item = entity.data!.serviceList![i];
|
|
|
|
|
|
if (item.serviceIp!.contains('192')) {
|
2023-12-21 10:21:25 +08:00
|
|
|
|
UDPManage().host = entity.data!.serviceList![0].serviceIp!;
|
2024-08-21 18:31:19 +08:00
|
|
|
|
final List<String> itemList = item.serviceIp!.split('.');
|
|
|
|
|
|
for (String element in itemList) {
|
2023-12-11 13:44:15 +08:00
|
|
|
|
serversList.add(int.parse(element));
|
|
|
|
|
|
}
|
2023-12-20 16:52:18 +08:00
|
|
|
|
} else {
|
2024-08-21 18:31:19 +08:00
|
|
|
|
final List<InternetAddress> addresses =
|
2023-12-20 16:52:18 +08:00
|
|
|
|
await InternetAddress.lookup(item.serviceIp!);
|
2023-12-21 10:21:25 +08:00
|
|
|
|
UDPManage().host = addresses.first.address;
|
2024-08-21 18:31:19 +08:00
|
|
|
|
final List<String> itemList = addresses.first.address.split('.');
|
|
|
|
|
|
for (String element in itemList) {
|
2023-12-11 13:44:15 +08:00
|
|
|
|
serversList.add(int.parse(element));
|
|
|
|
|
|
}
|
2024-04-26 15:38:59 +08:00
|
|
|
|
// AppLog.log('Resolved google.com to address: ${addresses.first.address} serversList:$serversList');
|
2023-12-11 13:44:15 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-08-21 18:31:19 +08:00
|
|
|
|
final String? uid = await Storage.getUid();
|
|
|
|
|
|
udpHeartTimer = Timer.periodic(1.seconds, (Timer timer) async {
|
|
|
|
|
|
getLoginStatus().then((bool value) {
|
2024-04-16 18:04:17 +08:00
|
|
|
|
if (value) {
|
|
|
|
|
|
UDPSenderManage.sendHeart(
|
|
|
|
|
|
userName: uid,
|
|
|
|
|
|
ipList: serversList,
|
2024-08-21 18:31:19 +08:00
|
|
|
|
tokenStr: 'b989fa15f75c2ac02718b7c9bb64f80e',
|
2024-04-16 18:04:17 +08:00
|
|
|
|
);
|
2024-11-28 14:57:49 +08:00
|
|
|
|
// AppLog.log('发送心跳了');
|
2024-04-16 18:04:17 +08:00
|
|
|
|
} else {
|
|
|
|
|
|
timer.cancel();
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
2023-12-11 13:44:15 +08:00
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-04-16 18:04:17 +08:00
|
|
|
|
Future<bool> getLoginStatus() async {
|
2024-08-21 18:31:19 +08:00
|
|
|
|
final String? data = await Storage.getString(saveUserLoginData);
|
2024-04-16 18:04:17 +08:00
|
|
|
|
if (data != null && data.isNotEmpty) {
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-01-08 11:32:35 +08:00
|
|
|
|
void closeUDP() {
|
2024-03-06 17:19:52 +08:00
|
|
|
|
if (udpHeartTimer != null) {
|
2024-01-09 18:02:02 +08:00
|
|
|
|
udpHeartTimer!.cancel();
|
|
|
|
|
|
}
|
2024-01-08 11:32:35 +08:00
|
|
|
|
}
|
2023-12-11 13:44:15 +08:00
|
|
|
|
|
2024-03-29 13:54:38 +08:00
|
|
|
|
// dispose() {
|
|
|
|
|
|
// udpHeartTimer!.cancel();
|
|
|
|
|
|
// }
|
2023-12-11 13:44:15 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
class UdpData {
|
|
|
|
|
|
bool isUsed = false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// class UdpSendThread {
|
|
|
|
|
|
// List<UdpData> udpDatas = [];
|
|
|
|
|
|
// bool udpSendTag = true;
|
|
|
|
|
|
// int udpSendTime = 0;
|
|
|
|
|
|
//
|
|
|
|
|
|
// UdpSendThread() {
|
|
|
|
|
|
// for (int i = 0; i < BUFNUM; i++) {
|
|
|
|
|
|
// udpDatas.add(UdpData());
|
|
|
|
|
|
// }
|
|
|
|
|
|
// udpSend();
|
|
|
|
|
|
// }
|
|
|
|
|
|
//
|
|
|
|
|
|
// void udpSend() async {
|
|
|
|
|
|
// while (udpSendTag) {
|
|
|
|
|
|
// while (udpSendTime <= 0) {
|
|
|
|
|
|
// await Future.delayed(Duration(seconds: 1));
|
|
|
|
|
|
// }
|
|
|
|
|
|
// bool hasDataSend = true;
|
|
|
|
|
|
// while (hasDataSend) {
|
|
|
|
|
|
// hasDataSend = false;
|
|
|
|
|
|
// for (int i = 0; i < BUFNUM; i++) {
|
|
|
|
|
|
// UdpData udpList = udpDatas[i];
|
|
|
|
|
|
// if (udpList.isUsed) {
|
|
|
|
|
|
// // Do something
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
// // Do something else
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// await Future.delayed(Duration(seconds: 1));
|
|
|
|
|
|
// }
|
|
|
|
|
|
// udpSendTime--;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
// import 'dart:async';
|
|
|
|
|
|
//
|
|
|
|
|
|
// class UdpSendCondition {
|
|
|
|
|
|
// bool udpSendTag = true;
|
|
|
|
|
|
// int udpSendTime = 0;
|
|
|
|
|
|
// List udpDatas = [];
|
|
|
|
|
|
// Isolate isolate;
|
|
|
|
|
|
//
|
|
|
|
|
|
// void start() async {
|
|
|
|
|
|
// final receivePort = ReceivePort();
|
|
|
|
|
|
// isolate = await Isolate.spawn(_isolateEntry, receivePort.sendPort);
|
|
|
|
|
|
//
|
|
|
|
|
|
// receivePort.listen((message) {
|
|
|
|
|
|
// if (message == 'done') {
|
|
|
|
|
|
// udpSendTime--;
|
|
|
|
|
|
// if (udpSendTime <= 0) {
|
|
|
|
|
|
// stop();
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// });
|
|
|
|
|
|
// }
|
|
|
|
|
|
//
|
|
|
|
|
|
// void stop() {
|
|
|
|
|
|
// if (isolate != null) {
|
|
|
|
|
|
// isolate.kill(priority: Isolate.immediate);
|
|
|
|
|
|
// isolate = null;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
//
|
|
|
|
|
|
// void _isolateEntry(SendPort sendPort) async {
|
|
|
|
|
|
// bool hasDataSend = true;
|
|
|
|
|
|
// while (hasDataSend) {
|
|
|
|
|
|
// hasDataSend = false;
|
|
|
|
|
|
// for (int i = 0; i < BUFNUM; i++) {
|
|
|
|
|
|
// var udpList = udpDatas[i];
|
|
|
|
|
|
// if (udpList.isUsed) {
|
|
|
|
|
|
// // Do something
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
// // Do something else
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// await Future.delayed(Duration(seconds: 1));
|
|
|
|
|
|
// }
|
|
|
|
|
|
// sendPort.send('done');
|
2024-11-25 11:07:29 +08:00
|
|
|
|
// }
|