app-starlock/lib/talk/udp/udp_help.dart

168 lines
4.4 KiB
Dart
Raw Normal View History

2023-12-11 13:44:15 +08:00
import 'dart:async';
import 'dart:io';
import 'package:get/get.dart';
import 'package:star_lock/main/lockDetail/lockSet/configuringWifi/configuringWifi/configuringWifiEntity.dart';
2023-12-11 13:44:15 +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';
class UdpHelp {
Timer? udpHeartTimer;
2023-12-11 13:44:15 +08:00
openUDP() async {
// 从服务器获取ip跟端口
final ConfiguringWifiEntity entity =
await ApiRepository.to.getWifiLockServiceIpAndPort();
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
final List<int> serversList = <int>[];
for (int i = 0; i < entity.data!.serviceList!.length; i++) {
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!;
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));
}
} else {
final List<InternetAddress> addresses =
await InternetAddress.lookup(item.serviceIp!);
2023-12-21 10:21:25 +08:00
UDPManage().host = addresses.first.address;
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
}
}
final String? uid = await Storage.getUid();
udpHeartTimer = Timer.periodic(1.seconds, (Timer timer) async {
getLoginStatus().then((bool value) {
if (value) {
UDPSenderManage.sendHeart(
userName: uid,
ipList: serversList,
tokenStr: 'b989fa15f75c2ac02718b7c9bb64f80e',
);
2024-11-28 14:57:49 +08:00
// AppLog.log('发送心跳了');
} else {
timer.cancel();
}
});
2023-12-11 13:44:15 +08:00
});
}
}
Future<bool> getLoginStatus() async {
final String? data = await Storage.getString(saveUserLoginData);
if (data != null && data.isNotEmpty) {
return true;
}
return false;
}
void closeUDP() {
if (udpHeartTimer != null) {
udpHeartTimer!.cancel();
}
}
2023-12-11 13:44:15 +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');
// }