diff --git a/SunlightAggregationManager.csproj b/SunlightAggregationManager.csproj index 0e0bee5..9ec952f 100644 --- a/SunlightAggregationManager.csproj +++ b/SunlightAggregationManager.csproj @@ -13,6 +13,7 @@ + diff --git a/UserClass/AsyncTcpServer.cs b/UserClass/AsyncTcpServer.cs index 24d739b..948278f 100644 --- a/UserClass/AsyncTcpServer.cs +++ b/UserClass/AsyncTcpServer.cs @@ -31,7 +31,9 @@ namespace SunlightAggregationManager.UserClass //TcpService service = new TcpService(); service.Connecting = (client, e) => { return EasyTask.CompletedTask; };//有客户端正在连接 service.Connected = (client, e) => {return EasyTask.CompletedTask;};//有客户端成功连接 - service.Closing = (client, e) => { return EasyTask.CompletedTask; };//有客户端正在断开连接,只有当主动断开时才有效。 + service.Closing = (client, e) => { + Console.WriteLine("[Disconnecting]IP[" + client.IP + "]ID[" + client.Id + "]"); + return EasyTask.CompletedTask; };//有客户端正在断开连接,只有当主动断开时才有效。 service.Closed = (client, e) => { //离线记录 Dictionary myDictOff = new Dictionary(); @@ -66,7 +68,7 @@ namespace SunlightAggregationManager.UserClass MainWindowViewModel.Updata_Memory(MainWindowViewModel._userData, "User='" + deserializedPerson?.User + "'", myDict); Console.WriteLine("[Log on]User[" + deserializedPerson?.User + "]Note[" + (deserializedPerson?.Dat ?? "unknown") + "]"); - client.SendAsync(Command(deserializedPerson?.Dat?? "NOT")); + Command(deserializedPerson?.Dat ?? "NOT", client.Id); } else {//首次登录记录 @@ -140,18 +142,12 @@ namespace SunlightAggregationManager.UserClass } } - //string DAT = e.ByteBlock.Span.ToString(Encoding.UTF8).Substring(5); - //string SYSDAT = "";// = e.ByteBlock.Span.ToString(Encoding.ASCII).Substring(5); - // string SYSKEY = ""; - // if (DAT.Length >= 16) SYSKEY = DAT.Substring(0, 16); - // if (DAT.Length > 16) SYSDAT = DAT.Substring(16); - - return EasyTask.CompletedTask; }; + await service.SetupAsync(new TouchSocketConfig()//载入配置 - // .SetMaxBufferSize(1024 * 1024 * 100) + // .SetMaxBufferSize(1024 * 1024 * 100) //.SetMinBufferSize(1024 * 1024) .SetListenIPHosts(new IPHost[] { new IPHost(port1), new IPHost(port2) })//同时监听两个地址 .ConfigureContainer(a =>//容器的配置顺序应该在最前面 @@ -161,6 +157,7 @@ namespace SunlightAggregationManager.UserClass { }) ); + await service.StartAsync();//启动 Console.WriteLine("TCP Port:"+ port1.ToString()); @@ -168,7 +165,7 @@ namespace SunlightAggregationManager.UserClass Console.WriteLine("TCP SERVER:START"); } - public static string Command(string dat)// + public static async void Command(string dat,string id)// { string Command="", ret =""; @@ -179,14 +176,27 @@ namespace SunlightAggregationManager.UserClass if (Command == "Info")//回复info请求的信息 { var t = ToList(MainWindowViewModel._machines).ToJsonString(); - + //格式化返回信息 data_.Add("Info", t); + ret = JsonSerializer.Serialize(data_); + } + if (Command == "Query")//回复Query请求的信息 + { + string s_ = deserialized.GetValue("StartTime").ToString()!; + string e_ = deserialized.GetValue("EndTime").ToString()!; + DataTable resultTable = await MainWindowViewModel.dataBase.ExecuteQueryAsync("SELECT * FROM [dbo].[Dyelots] " + + "WHERE CreationTime>'"+s_+"'and CreationTime<'"+e_+"'"); + //格式化返回信息 + data_.Add("Query", Newtonsoft.Json.JsonConvert.SerializeObject(resultTable)); ret = JsonSerializer.Serialize(data_); } + if (Command == "QueryDetail")//回复info请求的信息 + { + } - return ret; + await service.SendAsync(id, ret); } public static List>? ToList(DataTable table)//datatable转list diff --git a/UserClass/DataBase.cs b/UserClass/DataBase.cs index 4d8205b..e7feacd 100644 --- a/UserClass/DataBase.cs +++ b/UserClass/DataBase.cs @@ -2,6 +2,7 @@ using Microsoft.Data.SqlClient; using System; using System.Collections.Generic; +using System.Data; using System.Text; using System.Windows.Controls; using System.Windows.Input; @@ -70,6 +71,52 @@ namespace SunlightAggregationManager.UserClass }); } + public async Task ExecuteQueryAsync(string sql) + { + // 创建一个空的 DataTable 用于存放查询结果 + DataTable dataTable = new DataTable(); + + // 沿用你原有的数据库连接字符串构建逻辑 + var builder = new SqlConnectionStringBuilder + { + DataSource = DB_IP, + InitialCatalog = DB_NAME, + IntegratedSecurity = DB_TYPE == "Windows Authentication", + TrustServerCertificate = true, + ConnectTimeout = 5 + }; + + if (!builder.IntegratedSecurity) + { + builder.UserID = DB_ID; + builder.Password = DB_PASSWORD; + } + + try + { + using var conn = new SqlConnection(builder.ConnectionString); + await conn.OpenAsync(); // 使用异步方式打开连接source_group_web_2 + + using (var cmd = new SqlCommand(sql, conn)) + { + // 执行查询并将结果直接加载到 DataTable 中 + using (var reader = await cmd.ExecuteReaderAsync()) + { + dataTable.Load(reader); + } + } + + } + catch (Exception ex) + { + Console.WriteLine("DataBase Query failed\n" + ex.ToString()); + // 这里可以选择将异常抛出给调用方,或者返回一个空的 DataTable + throw; + } + + return dataTable; + } + public void Database(string dat) { diff --git a/ViewModel/MainWindowViewModel.cs b/ViewModel/MainWindowViewModel.cs index b97900c..913d0b0 100644 --- a/ViewModel/MainWindowViewModel.cs +++ b/ViewModel/MainWindowViewModel.cs @@ -28,6 +28,7 @@ namespace SunlightAggregationManager.ViewModel public static string TCP_E = "0"; public static string HTTP_E = "0"; public static string TLS_E = "0"; + public static DataBase dataBase = new DataBase(); public static UserClass.SqliteHelper SQLiteHelpers = null!; //定义数据库 private readonly string DBAddress = Environment.CurrentDirectory + "\\DataBase\\SunlightAggregationManager.db"; //数据库路径 @@ -78,8 +79,7 @@ namespace SunlightAggregationManager.ViewModel Console.WriteLine(ex.ToString()); } - //运行数据库 - DataBase dataBase = new DataBase(); + //运行数据库 dataBase.Config(SQLIP, SQLNAME, SQMOD, SQLUSER, SQLPASWORD); if (TCP_E == "1")//启动tcp(内网直连)