diff --git a/AppShell.xaml.cs b/AppShell.xaml.cs index b0c61c3..d724835 100644 --- a/AppShell.xaml.cs +++ b/AppShell.xaml.cs @@ -23,8 +23,11 @@ namespace SunlightAggregationTerminal } else { - //发送登录请求 + TcpServer.Configuration(App.GlobalData.ServerID, + App.GlobalData.User, App.GlobalData.UserPassword, + Models.AppModels.GetAppUniqueId()); + if (await AppModels.LogIn()) {//拒绝登陆时打开登录页面 var logpage = new View.LogPage(); diff --git a/Class/SecureJsonService.cs b/Class/SecureJsonService.cs index c2919ad..5c92a91 100644 --- a/Class/SecureJsonService.cs +++ b/Class/SecureJsonService.cs @@ -9,13 +9,13 @@ namespace SunlightAggregationTerminal.Class { public class SecureJsonService { - private readonly byte[] _aesKey = Encoding.UTF8.GetBytes("12345678901234567890123456789012"); + private static readonly byte[] _aesKey = Encoding.UTF8.GetBytes("12345678901234567890123456789012"); /// /// 调用一:发送端处理 /// 流程:JSON序列化 -> GZip压缩 -> AES加密 -> Base64编码 /// - public string CompressEncryptAndSend(object dataObject) + public static string CompressEncryptAndSend(object dataObject) { try { @@ -35,9 +35,8 @@ namespace SunlightAggregationTerminal.Class return finalPayload; } - catch (Exception ex) + catch (Exception) { - Console.WriteLine($"发送端处理错误: {ex.Message}"); throw; } } @@ -46,7 +45,7 @@ namespace SunlightAggregationTerminal.Class /// 调用二:接收端处理 /// 流程:Base64解码 -> AES解密 -> GZip解压 -> JSON反序列化 /// - public T? ReceiveDecryptAndDecompress(string payload) + public static T? ReceiveDecryptAndDecompress(string payload) { try { @@ -73,7 +72,7 @@ namespace SunlightAggregationTerminal.Class // --- 底层辅助方法 --- - private byte[] CompressBytes(byte[] data) + private static byte[] CompressBytes(byte[] data) { using (var outputStream = new MemoryStream()) { @@ -85,7 +84,7 @@ namespace SunlightAggregationTerminal.Class } } - private byte[] DecompressBytes(byte[] data) + private static byte[] DecompressBytes(byte[] data) { using (var inputStream = new MemoryStream(data)) { @@ -100,7 +99,7 @@ namespace SunlightAggregationTerminal.Class } } - private byte[] EncryptBytes(byte[] data) + private static byte[] EncryptBytes(byte[] data) { using (Aes aes = Aes.Create()) { @@ -126,7 +125,7 @@ namespace SunlightAggregationTerminal.Class } } - private byte[] DecryptBytes(byte[] data) + private static byte[] DecryptBytes(byte[] data) { using (Aes aes = Aes.Create()) { diff --git a/Class/TcpServer.cs b/Class/TcpServer.cs index ddab080..72da845 100644 --- a/Class/TcpServer.cs +++ b/Class/TcpServer.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using System.Text.Json; using TouchSocket.Core; using TouchSocket.Sockets; @@ -8,6 +9,15 @@ namespace SunlightAggregationTerminal.Class { public class TcpServer { + public class Person + { + public required string User { get; set; } + public required string Password { get; set; } + public required string IP { get; set; } + public required string Terminal { get; set; } + public required string Dat { get; set; } + } + public static string ServerIP = ""; public static string ServerName = ""; public static string ServerPassword = ""; @@ -23,18 +33,34 @@ namespace SunlightAggregationTerminal.Class ServerTerminal = Terminal; - _= TcpClient(tcpClient, ServerIP, "7789"); + _= TcpClient(tcpClient, ServerIP); } - public static async void Query(string Dat) + public static async void TcpTransmit(string Dat) { - + var dat = new Person() + { + User = ServerName , + Password = ServerPassword, + IP = ServerIP, + Terminal = ServerTerminal, + Dat = Dat + }; + + //SecureJsonService.CompressEncryptAndSend(); //发送字符串数据 - await tcpClient.SendAsync("hello"); + try + { + await tcpClient.SendAsync(JsonSerializer.Serialize(dat)); + } + catch (Exception) + { + await Application.Current!.Windows[0].Page!.DisplayAlertAsync("错误", "连接未启用", "是"); + } } - public static async Task TcpClient(TcpClient tcpClient, string ip, string port) + public static async Task TcpClient(TcpClient tcpClient, string ip) { tcpClient.Connecting = (client, e) => { return EasyTask.CompletedTask; };//即将连接到服务器,此时已经创建socket,但是还未建立tcp tcpClient.Connected = (client, e) => { return EasyTask.CompletedTask; };//成功连接到服务器 @@ -45,24 +71,55 @@ namespace SunlightAggregationTerminal.Class { //从服务器收到信息。但是一般byteBlock和requestInfo会根据适配器呈现不同的值。 var mes = e.Memory.Span.ToString(Encoding.UTF8); - tcpClient.Logger.Info($"客户端接收到信息:{mes}"); - - + var data = JsonSerializer.Deserialize>(mes); + if (data != null) + { + //处理服务器发送信息 + if (data.TryGetValue("Enterprise", out var value_Enterprise)) + { + if (value_Enterprise != null) { App.GlobalData.Enterprise = value_Enterprise.ToString() ?? ""; } + } + if (data.TryGetValue("Department", out var value_Department)) + { + if (value_Department != null) { App.GlobalData.Department = value_Department.ToString() ?? ""; } + } + if (data.TryGetValue("Groups", out var value_Groups)) + { + if (value_Groups != null) { App.GlobalData.Groups = value_Groups.ToString() ?? ""; } + } + if (data.TryGetValue("UserId", out var value_UserId)) + { + if (value_Groups != null) { App.GlobalData.UserId = value_UserId.ToString() ?? ""; } + } + if (data.TryGetValue("UserName", out var value_UserName)) + { + if (value_Groups != null) { App.GlobalData.Groups = value_UserName.ToString() ?? ""; } + } + } + return EasyTask.CompletedTask; }; #endregion - await tcpClient.SetupAsync(new TouchSocketConfig() - .SetRemoteIPHost(ip + ":" + port) - .ConfigurePlugins(a => - { - }) - .ConfigureContainer(a => - { - - } - )); - await tcpClient.ConnectAsync();//调用连接,当连接不成功时,会抛出异常。 + try + { + await tcpClient.SetupAsync(new TouchSocketConfig() + .SetRemoteIPHost(ip) + .ConfigurePlugins(a => + { + a.UseReconnection(options => + { + options.PollingInterval = TimeSpan.FromSeconds(5); + }); + }) + .ConfigureContainer(a => + { + })); + await tcpClient.ConnectAsync();//调用连接,当连接不成功时,会抛出异常。 + } catch (Exception) + { + await Application.Current!.Windows[0].Page!.DisplayAlertAsync("错误", "不合法的访问地址", "是"); + } } } } diff --git a/View/LogPage.xaml.cs b/View/LogPage.xaml.cs index 214b0ec..ae72706 100644 --- a/View/LogPage.xaml.cs +++ b/View/LogPage.xaml.cs @@ -73,6 +73,8 @@ public partial class LogPage : ContentPage TcpServer.Configuration(SERVERIP.Text, UsernameEntry.Text, PasswordEntry.Text, Models.AppModels.GetAppUniqueId()); + TcpServer.TcpTransmit("Log"); + LoadingIndicator.IsVisible = true; if (await AppModels.LogIn())