app-starlock/lib/talk/udp/udp_help.dart
2024-05-18 09:37:50 +08:00

171 lines
4.2 KiB
Dart
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'dart:async';
import 'dart:io';
import 'package:get/get.dart';
import '../../network/api_repository.dart';
import '../../tools/storage.dart';
import 'udp_manage.dart';
import 'udp_senderManage.dart';
class UdpHelp {
Timer? udpHeartTimer;
openUDP() async {
// 从服务器获取ip跟端口
var entity = await ApiRepository.to.getWifiLockServiceIpAndPort();
if (entity.errorCode! == 0) {
UDPManage();
// UDPManage().initUdp();
UDPManage().port = int.parse(entity.data!.serviceList![0].port!);
var serversList = <int>[];
for (int i = 0; i < entity.data!.serviceList!.length; i++) {
var item = entity.data!.serviceList![i];
if (item.serviceIp!.contains("192")) {
UDPManage().host = entity.data!.serviceList![0].serviceIp!;
var itemList = item.serviceIp!.split(".");
for (var element in itemList) {
serversList.add(int.parse(element));
}
} else {
List<InternetAddress> 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));
}
// AppLog.log('Resolved google.com to address: ${addresses.first.address} serversList$serversList');
}
}
var uid = await Storage.getUid();
udpHeartTimer = Timer.periodic(1.seconds, (timer) async {
getLoginStatus().then((value) {
if (value) {
UDPSenderManage.sendHeart(
userName: uid,
ipList: serversList,
tokenStr: "b989fa15f75c2ac02718b7c9bb64f80e",
);
// AppLog.log('发送心跳了');
} else {
timer.cancel();
}
});
});
}
}
Future<bool> getLoginStatus() async {
final data = await Storage.getString(saveUserLoginData);
if (data != null && data.isNotEmpty) {
return true;
}
return false;
}
void closeUDP() {
if (udpHeartTimer != null) {
udpHeartTimer!.cancel();
}
}
// dispose() {
// udpHeartTimer!.cancel();
// }
}
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');
// }