登录 完成

This commit is contained in:
WoNiu 2024-04-06 15:38:28 +08:00
parent f6af40701c
commit 784cad7f3d
5 changed files with 91 additions and 57 deletions

View File

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

View File

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

View File

@ -41,7 +41,10 @@ class _MyAppState extends State<MyApp> {
info() async {
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 {
/// Uint8List

View File

@ -8,7 +8,7 @@ import 'little_extension.dart';
import 'code.dart';
import 'number_tool.dart';
class SocketUtils extends Socket{
class SocketUtils extends SyncSocket{
//
SocketUtils._();
//
@ -22,7 +22,7 @@ class SocketUtils extends Socket{
}
class Socket {
class SyncSocket {
String url = '127.0.0.1';
static int port = 12345;