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

168 lines
4.4 KiB
Dart
Executable File
Raw Permalink 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 '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');
// }