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(内网直连)