Compare commits

...

4 Commits

Author SHA1 Message Date
WoNiu ff882a5e06 1 删除 开发者按钮
2 socket 连接时 先将旧连接关闭
3 恢复 主机 ic
2024-04-06 16:32:10 +08:00
WoNiu 30af057969 Merge branch '受控' into 主控 2024-04-06 16:20:51 +08:00
WoNiu 51d33a1137 修改 ip 2024-04-06 16:16:15 +08:00
WoNiu 784cad7f3d 登录 完成 2024-04-06 15:38:28 +08:00
6 changed files with 93 additions and 64 deletions

View File

@ -1,9 +1,12 @@
import 'dart:async'; import 'dart:async';
import 'dart:convert'; import 'dart:convert';
import 'dart:ffi';
import 'dart:io'; import 'dart:io';
import 'dart:typed_data';
import 'package:common/utils/toast_utils.dart'; import 'package:common/utils/toast_utils.dart';
import 'package:web_synchronization_tool/windows/little_extension.dart';
import 'package:web_synchronization_tool/windows/socket_tool.dart'; import 'package:web_synchronization_tool/windows/socket_tool.dart';
import '../windows/code.dart'; import '../windows/code.dart';
@ -29,26 +32,24 @@ typedef loginBlockFun = Function(Map);
class LoginSocket{ class LoginSocket{
String url = '192.168.200.17'; String url = '110.42.251.214';
static int port = 37785; static int port = 37785;
String uuid = ''; String uuid = '';
RawDatagramSocket? socket; Socket? socket;
int heartTime = 0; int heartTime = 0;
connect() async { connect() async {
socket = await RawDatagramSocket.bind(InternetAddress.anyIPv4, 0); socket?.close();
socket = await Socket.connect(url, port, timeout: const Duration(seconds: 30));
socket?.listen((event) {
Map data = dataCute(event);
//
socket?.listen((RawSocketEvent e) {
Datagram? d = socket?.receive();
if (d == null) return;
print(d.data);
Map data = json.decode(cutecode(d.data));// dataCute();
print(data);
// //
if (data['op'] == 2){ if (data['op'] == 2){
loginBlock(data); loginBlock(data);
@ -57,7 +58,9 @@ class LoginSocket{
// //
if (data['op'] == 4){ if (data['op'] == 4){
try{ try{
if(data['time']> (3 * 60 * 1000) ){ // > 3 int time = data['time'];
time = DateTime.now().millisecondsSinceEpoch - time;
if(time> (3 * 60 * 1000) ){ // > 3
socketError(); socketError();
} }
}catch(e){ }catch(e){
@ -65,19 +68,16 @@ class LoginSocket{
} }
} }
}); },onDone: (){
},onError: (error){
// 30 //
socket?.timeout(const Duration(seconds: 30), onTimeout: (eventSink) { socketError();
socket?.destroy();
ToastUtils.dismissLoading();
ToastUtils.showToast('连接超时');
eventSink.close(); //
}); });
} }
socketError(){ socketError(){
/// ///
ToastUtils.showLoading(msg: '重连中'); ToastUtils.showLoading(msg: '重连中');
@ -88,17 +88,21 @@ class LoginSocket{
late loginBlockFun loginBlock; late loginBlockFun loginBlock;
//
login(String account,String passwoord,loginBlockFun blockFun){ login(String account,String passwoord,loginBlockFun blockFun){
loginBlock = blockFun; loginBlock = blockFun;
Map map = { Map map = {
'op':1,
'account':account, 'account':account,
'passwoord':passwoord, 'password':passwoord,
'uuid':uuid // 0 c盘 'uuid':uuid
}; };
List<int> data = jsonEncode(map).codeUnits;
socket?.send(data, InternetAddress(url), port); final dd = dataMake(map);
socket?.add(dd);
socket?.flush();
} }
/// ///
@ -107,7 +111,7 @@ class LoginSocket{
int timestamp = now.millisecondsSinceEpoch; // int timestamp = now.millisecondsSinceEpoch; //
heartTime = timestamp; heartTime = timestamp;
Timer timer = Timer(const Duration(seconds: 20), () async { Timer(const Duration(seconds: 20), () async {
if (socket == null){ if (socket == null){
// //
@ -117,40 +121,44 @@ class LoginSocket{
Map map = { Map map = {
"op": 3, "op": 3,
}; };
List<int> data = jsonEncode(map).codeUnits;
socket?.send(data, InternetAddress(url), port); socket?.add(dataMake(map));
socket?.flush();
heartbeat(); heartbeat();
}); });
} }
// ///
// List<int> dataMake(Map map){ ///
// // Map对象转换为JSON字符串 List<int> dataMake(Map map){
// String json = jsonEncode(map);
// //
// String ps = makecode(json, skey); // Map对象转换为JSON字符串
// // String json = jsonEncode(map);
// Uint8List uinData = Uint8List.fromList(ps.codeUnits); //
// // 4 String ps = makecode(json, skey);
// uinData = uinData.toLittle(value: uinData.length);
// return uinData.toList(); List<int> bytes = ps.codeUnits; //
// }
// return bytes.toLittle();
// /// }
// Map dataCute(Uint8List data){
// ///
// if (data.length <= 4) return {}; Map dataCute(Uint8List data){
//
// Uint8List pData = data.sublist(4,data.length); if (data.length <= 4) return {};
//
// String str = cutecode(pData); Uint8List pData = data.sublist(4,data.length);
//
// Map map = json.decode(str); String str = cutecode(pData);
//
// return map; Map map = json.decode(str);
// }
return map;
}
} }

View File

@ -82,8 +82,6 @@ class _AccountNumberLoginWidgetState extends State<AccountNumberLoginWidget> {
_login(); _login();
},), },),
WidgetUtils.spacer(height: 15), WidgetUtils.spacer(height: 15),
const Text('注册请直接输入账号密码 再点击注册',style: TextStyle(fontSize: 14,color: Colors.grey),),
WidgetUtils.spacer(height: 15),
TextButton( TextButton(
onPressed: _login, onPressed: _login,
style: TextButton.styleFrom(padding: EdgeInsets.zero), style: TextButton.styleFrom(padding: EdgeInsets.zero),

View File

@ -41,7 +41,10 @@ class _MyAppState extends State<MyApp> {
info() async { info() async {
final deviceInfo = await DeviceInfoPlugin().deviceInfo; final deviceInfo = await DeviceInfoPlugin().deviceInfo;
LoginSocketUtils.getInstance().uuid = deviceInfo.data.toString(); String uuid = deviceInfo.data['deviceId'];
uuid = uuid.replaceAll('{', '');
uuid = uuid.replaceAll('}', '');
LoginSocketUtils.getInstance().uuid = uuid;
} }

View File

@ -23,6 +23,30 @@ extension MapLittle on Map {
} }
extension ListIntLittle on List<int> {
List<int> toLittle({int? value, int length = 4}){
List<int> ret = [];
///
final little = ByteData(4);
///
little.setInt32(0, value ?? this.length, Endian.little);
for (int i = 0; i < little.lengthInBytes; i++) {
ret.add(little.getUint8(i));
}
ret.addAll(this);
return ret;
}
}
extension Uint8ListLittle on Uint8List { extension Uint8ListLittle on Uint8List {
/// Uint8List /// Uint8List

View File

@ -8,7 +8,7 @@ import 'little_extension.dart';
import 'code.dart'; import 'code.dart';
import 'number_tool.dart'; import 'number_tool.dart';
class SocketUtils extends Socket{ class SocketUtils extends SyncSocket{
// //
SocketUtils._(); SocketUtils._();
// //
@ -22,7 +22,7 @@ class SocketUtils extends Socket{
} }
class Socket { class SyncSocket {
String url = '127.0.0.1'; String url = '127.0.0.1';
static int port = 12345; static int port = 12345;
@ -30,12 +30,13 @@ class Socket {
RawDatagramSocket? socket; RawDatagramSocket? socket;
// IC 0 1 // IC 0 1
int ic = 1; int ic = 0;
/// ip /// ip
List<String> childrenIp = []; List<String> childrenIp = [];
connect() async { connect() async {
socket?.close();
socket = await RawDatagramSocket.bind(InternetAddress.anyIPv4, 0); socket = await RawDatagramSocket.bind(InternetAddress.anyIPv4, 0);
// //

View File

@ -152,11 +152,6 @@ class _ShowWebWidgetState extends State<ShowWebWidget> {
if (widget.main == false) return input(); if (widget.main == false) return input();
return Row( return Row(
children: [ children: [
TextButton(
onPressed: () {
widget.controller.openDevTools();
},
child: const Text('开发者')),
inputNumber(), inputNumber(),
Row( Row(
children: [ children: [