168 lines
4.4 KiB
Dart
Executable File
168 lines
4.4 KiB
Dart
Executable File
import 'dart:async';
|
||
import 'dart:io';
|
||
|
||
import 'package:get/get.dart';
|
||
import 'package:star_lock/main/lockDetail/lockSet/configuringWifi/configuringWifi/configuringWifiEntity.dart';
|
||
|
||
import '../../app_settings/app_settings.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跟端口
|
||
final ConfiguringWifiEntity entity =
|
||
await ApiRepository.to.getWifiLockServiceIpAndPort();
|
||
if (entity.errorCode! == 0) {
|
||
UDPManage();
|
||
// UDPManage().initUdp();
|
||
UDPManage().port = int.parse(entity.data!.serviceList![0].port!);
|
||
|
||
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')) {
|
||
UDPManage().host = entity.data!.serviceList![0].serviceIp!;
|
||
final List<String> itemList = item.serviceIp!.split('.');
|
||
for (String element in itemList) {
|
||
serversList.add(int.parse(element));
|
||
}
|
||
} else {
|
||
final List<InternetAddress> addresses =
|
||
await InternetAddress.lookup(item.serviceIp!);
|
||
UDPManage().host = addresses.first.address;
|
||
final List<String> itemList = addresses.first.address.split('.');
|
||
for (String element in itemList) {
|
||
serversList.add(int.parse(element));
|
||
}
|
||
// AppLog.log('Resolved google.com to address: ${addresses.first.address} serversList:$serversList');
|
||
}
|
||
}
|
||
|
||
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',
|
||
);
|
||
// AppLog.log('发送心跳了');
|
||
} else {
|
||
timer.cancel();
|
||
}
|
||
});
|
||
});
|
||
}
|
||
}
|
||
|
||
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();
|
||
}
|
||
}
|
||
|
||
// 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');
|
||
// }
|