diff --git a/MainWindow.xaml.cs b/MainWindow.xaml.cs index 1ccc0d7..aa1fe40 100644 --- a/MainWindow.xaml.cs +++ b/MainWindow.xaml.cs @@ -68,6 +68,7 @@ namespace SunlightAggregationManager { state.Visibility = Visibility.Collapsed; Picture.Visibility = Visibility.Visible; + Picture.Content = new View.ServicePage(); } private void ListViewItem_MouseLeftButtonUp_log(object sender, MouseButtonEventArgs e) { diff --git a/UserClass/AsyncTcpClient.cs b/UserClass/AsyncTcpClient.cs new file mode 100644 index 0000000..e4f27a2 --- /dev/null +++ b/UserClass/AsyncTcpClient.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Text; +using TouchSocket.Core; +using TouchSocket.Sockets; + +namespace SunlightAggregationManager.UserClass +{ + public class AsyncTcpClient + { + public static TouchSocket.Sockets.TcpClient tcpClient = new TouchSocket.Sockets.TcpClient(); + public static async void Configuration(string ip, string Name, string user, string Password) + { + await TcpClient(tcpClient, "tcp://"+ip); + } + public static async Task TcpClient(TouchSocket.Sockets.TcpClient tcpClient, string ip) + { + tcpClient.Connecting = (client, e) => { return EasyTask.CompletedTask; };//即将连接到服务器,此时已经创建socket,但是还未建立tcp + tcpClient.Connected = (client, e) => + { + + return EasyTask.CompletedTask; + };//成功连接到服务器 + tcpClient.Closing = (client, e) => { return EasyTask.CompletedTask; };//即将从服务器断开连接。此处仅主动断开才有效。 + tcpClient.Closed = (client, e) => { return EasyTask.CompletedTask; };//从服务器断开连接,当连接不成功时不会触发。 + #region Tcp客户端使用Received异步委托接收数据 + tcpClient.Received = (client, e) => + { + //从服务器收到信息。但是一般byteBlock和requestInfo会根据适配器呈现不同的值。 + var mes = e.Memory.Span.ToString(Encoding.UTF8); + + //DataReceived.Received(mes); + + return EasyTask.CompletedTask; + }; + #endregion + + try + { + await tcpClient.SetupAsync(new TouchSocketConfig() + .SetSingleStreamDataHandlingAdapter(() => new PeriodPackageAdapter())//以超时周期和包 + .SetRemoteIPHost(ip) + .ConfigurePlugins(a => + { + a.UseReconnection(options => + { + options.PollingInterval = TimeSpan.FromSeconds(5); + }); + })); + + await tcpClient.ConnectAsync();//调用连接,当连接不成功时,会抛出异常。 + } + catch (Exception ex) + { + Console.WriteLine("Tcp:" + ex.ToString()); + } + } + } +} diff --git a/View/ServicePage.xaml b/View/ServicePage.xaml new file mode 100644 index 0000000..f813e16 --- /dev/null +++ b/View/ServicePage.xaml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/View/ServicePage.xaml.cs b/View/ServicePage.xaml.cs new file mode 100644 index 0000000..9f6d766 --- /dev/null +++ b/View/ServicePage.xaml.cs @@ -0,0 +1,27 @@ +using SunlightAggregationManager.ViewModel; +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace SunlightAggregationManager.View +{ + /// + /// ServicePage.xaml 的交互逻辑 + /// + public partial class ServicePage : UserControl + { + public ServicePage() + { + InitializeComponent(); + } + } +} diff --git a/ViewModel/MainWindowViewModel.cs b/ViewModel/MainWindowViewModel.cs index ac3a202..42a8388 100644 --- a/ViewModel/MainWindowViewModel.cs +++ b/ViewModel/MainWindowViewModel.cs @@ -2,6 +2,7 @@ using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using SunlightAggregationManager.UserClass; +using SunlightAggregationManager.View; using System; using System.Collections.Generic; using System.Data; @@ -10,6 +11,7 @@ using System.Reflection.PortableExecutable; using System.Security.Cryptography; using System.Text; using System.Windows.Controls; +using System.Windows.Documents; using System.Windows.Input; using System.Xml.Linq; @@ -28,6 +30,10 @@ namespace SunlightAggregationManager.ViewModel public static string TCP_E = "0"; public static string HTTP_E = "0"; public static string TLS_E = "0"; + public static string SERVERIP = ""; + public static string SERVERNAME = ""; + public static string SERVERUSER = ""; + public static string SERRVERPASWORD = ""; public static DataBase dataBase = new DataBase(); public static UserClass.SqliteHelper SQLiteHelpers = null!; //定义数据库 private readonly string DBAddress = Environment.CurrentDirectory + "\\DataBase\\SunlightAggregationManager.db"; //数据库路径 @@ -38,6 +44,8 @@ namespace SunlightAggregationManager.ViewModel public static DataTable _machines = new DataTable(); //设备表缓存 [ObservableProperty] public static DataTable _userData = new DataTable(); + [ObservableProperty] + public static DataTable _service = new DataTable(); public MainWindowViewModel() { @@ -46,12 +54,14 @@ namespace SunlightAggregationManager.ViewModel SQMOD = Configini.IniReadvalue("SQL_SERVER", "SQL3"); SQLUSER = Configini.IniReadvalue("SQL_SERVER", "SQL4"); SQLPASWORD = Configini.IniReadvalue("SQL_SERVER", "SQL5"); - MachineName = Configini.IniReadvalue("SYS", "Name"); - TCP_E = Configini.IniReadvalue("NETWORK", "TCP"); HTTP_E = Configini.IniReadvalue("NETWORK", "HTTP"); TLS_E = Configini.IniReadvalue("NETWORK", "TLS"); + SERVERIP = Configini.IniReadvalue("SERVER", "SERVERIP"); + SERVERNAME = Configini.IniReadvalue("SERVER", "SERVERNAME"); + SERVERUSER = Configini.IniReadvalue("SERVER", "SERVERUSER"); + SERRVERPASWORD = Configini.IniReadvalue("SERVER", "SERRVERPASWORD"); //本地数据库(sqlite) try @@ -62,34 +72,41 @@ namespace SunlightAggregationManager.ViewModel Machines = SQLiteHelpers.ExecuteDataSet("select * from Machines order by ID asc", null)?.Tables[0] ?? new DataTable(); ActionLog = (SQLiteHelpers.ExecuteDataSet("select * from ActionLog", null)?.Tables[0] ?? new DataTable()).Clone(); // SQLiteHelpers.Close(); - DataRow[] dataRows = UserData.Select("State<90"); foreach (DataRow row in dataRows) { row["State"] = 0; row["LinkID"] = 0; } - Machines.RowChanged += Machines_Updata; UserData.RowChanged += UserData_Updata;//注册userdata表更新事件 - } catch (Exception ex) { Console.WriteLine(ex.ToString()); } + //服务信息表 + //DataTable Service = new DataTable(); + Service.BeginInit(); + Service.Columns.Add("ID", typeof(int)); + Service.Columns.Add("Status", typeof(string)); + Service.Columns.Add("Service", typeof(string)); + //运行数据库 + Service.Rows.Add(0, "RUN", "SQL_DataBase_Link"); dataBase.Config(SQLIP, SQLNAME, SQMOD, SQLUSER, SQLPASWORD); - + Service.Rows.Add(1, "RUN", "Sunlight_Server_Link"); + AsyncTcpClient.Configuration(SERVERIP, SERVERNAME, SERVERUSER, SERRVERPASWORD);//连接sunlight服务器 Console.WriteLine(GetLocalIP.GetLocalIPv4Address().ToString()); + if (TCP_E == "1")//启动tcp(内网直连) { int P1, P2; try { - P1 =int.Parse( Configini.IniReadvalue("NETWORK", "TCP_PORT1")); + P1 = int.Parse(Configini.IniReadvalue("NETWORK", "TCP_PORT1")); } catch (Exception) { P1 = 7789; } try @@ -98,7 +115,12 @@ namespace SunlightAggregationManager.ViewModel } catch (Exception) { P2 = 7790; } - _ = AsyncTcpServer.TcpMain(P1,P2); + Service.Rows.Add(2, "RUN", "TCP"); + _ = AsyncTcpServer.TcpMain(P1, P2); + } + else + { + Service.Rows.Add(2, "STOP", "TCP"); } if (HTTP_E == "1")//启动tcp(内网直连) { @@ -108,8 +130,15 @@ namespace SunlightAggregationManager.ViewModel P1 = int.Parse(Configini.IniReadvalue("NETWORK", "HTTP_PORT")); } catch (Exception) { P1 = 7791; } + + Service.Rows.Add(3, "RUN", "HTTP"); _ = AsyncHttpServer.HttpMain(P1); } + else + { + Service.Rows.Add(3, "STOP", "HTTP"); + } + Service.EndInit(); } private void Machines_Updata(object sender, DataRowChangeEventArgs e)