diff --git a/UserClass/AsyncTcpClient.cs b/UserClass/AsyncTcpClient.cs index 3fa0c67..d7efa62 100644 --- a/UserClass/AsyncTcpClient.cs +++ b/UserClass/AsyncTcpClient.cs @@ -137,7 +137,7 @@ namespace SunlightAggregationManager.UserClass }; #endregion - while (true) + // while (true) { try { @@ -158,16 +158,16 @@ namespace SunlightAggregationManager.UserClass })); await tcpClient.ConnectAsync();//调用连接,当连接不成功时,会抛出异常。 - break; + // break; } catch (Exception ex) { - tcpClient.Dispose();//清 + // tcpClient.Dispose();//清 LogGing.ERRDATA(ex); Console.WriteLine("Tcp:" + ex.ToString()); - await Task.Delay(TimeSpan.FromMinutes(1)); - Console.WriteLine("Tcp:重试连接..."); + // await Task.Delay(TimeSpan.FromMinutes(1)); + // Console.WriteLine("Tcp:重试连接..."); } } } diff --git a/UserClass/DataBase.cs b/UserClass/DataBase.cs index 791d5e2..efe93dd 100644 --- a/UserClass/DataBase.cs +++ b/UserClass/DataBase.cs @@ -64,7 +64,7 @@ namespace SunlightAggregationManager.UserClass catch (Exception ex) { LogGing.ERRDATA(ex); - Console.WriteLine("DataBase Link timeout\n"+ex.ToString()); + Console.WriteLine("DataBase Link timeout\n"+ ex.Message.ToString()); // 失败处理 return; // 直接返回,不执行后续代码 } @@ -111,9 +111,7 @@ namespace SunlightAggregationManager.UserClass catch (Exception ex) { LogGing.ERRDATA(ex); - Console.WriteLine("DataBase Query failed\n" + ex.ToString()); - // 将异常抛出给调用方,或者返回一个空的 DataTable - throw; + Console.WriteLine("DataBase Query failed\n" + ex.Message.ToString()); } return dataTable; @@ -158,9 +156,7 @@ namespace SunlightAggregationManager.UserClass catch (Exception ex) { LogGing.ERRDATA(ex); - Console.WriteLine("DataBase Query failed\n" + ex.ToString()); - // 将异常抛出给调用方,或者返回一个空的 DataTable - throw; + Console.WriteLine("DataBase Query failed\n" + ex.Message.ToString()); } return dataTable.Rows.Count; diff --git a/UserClass/LogGing.cs b/UserClass/LogGing.cs index 46369fd..7ec34e4 100644 --- a/UserClass/LogGing.cs +++ b/UserClass/LogGing.cs @@ -1,85 +1,133 @@ -using System; +using SunlightAggregationManager.View; +using System; +using System.Collections; using System.Collections.Generic; using System.Data; using System.IO; +using static System.Runtime.InteropServices.JavaScript.JSType; namespace SunlightAggregationManager.UserClass { public class LogGing { + public class LOGinf + { + public required string Logpath { get; set; } + public required string LogPath { get; set; } + public required string Log_time { get; set; } + public required object DAT { get; set; } + } + static Queue LogGingQueue = new Queue(); + static Queue ERRQueue = new Queue(); + static Queue ExchangeQueue = new Queue(); public static void LogGingDATA(string dat) { - string logpath = System.Environment.CurrentDirectory + "\\Log";//日志文件目录 - string logPath = "" + System.Environment.CurrentDirectory + "\\Log\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";//日志文件 - string Log_time = "[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "]:"; + LOGinf ginf = new LOGinf + { + Logpath = System.Environment.CurrentDirectory + "\\Log",//日志文件目录 + LogPath = "" + System.Environment.CurrentDirectory + "\\Log\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt",//日志文件 + Log_time = "[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "]:", + DAT = dat + }; + LogGingQueue.Enqueue(ginf); - if (Directory.Exists(logpath))//检查日志路径 + if(LogGingQueue.Count==1) LogGingQueueW(); + } + public static async void LogGingQueueW() + { + while (true) { - if (!File.Exists(logPath))//检查日志文件并写入启动日志 - { - FileStream fs = new FileStream(logPath, FileMode.CreateNew, FileAccess.Write);//创建写入文件 - StreamWriter wr = new StreamWriter(fs);//创建文件 - wr.WriteLine(Log_time + dat); - wr.Close(); - } - else + try { - try + LOGinf inf = LogGingQueue.Dequeue(); + + if (Directory.Exists(inf.Logpath))//检查日志路径 + { + if (!File.Exists(inf.LogPath))//检查日志文件并写入启动日志 + { + FileStream fs = new FileStream(inf.LogPath, FileMode.CreateNew, FileAccess.Write);//创建写入文件 + StreamWriter wr = new StreamWriter(fs);//创建文件 + wr.WriteLine(inf.Log_time + inf.DAT); + wr.Close(); + } + else + { + FileStream fs = new FileStream(inf.LogPath, FileMode.Append, FileAccess.Write); + StreamWriter wr = new StreamWriter(fs);//创建文件 + wr.WriteLine(inf.Log_time + inf.DAT); + wr.Close(); + } + } + else { - FileStream fs = new FileStream(logPath, FileMode.Append, FileAccess.Write); - StreamWriter wr = new StreamWriter(fs);//创建文件 - wr.WriteLine(Log_time + dat); - wr.Close(); + DirectoryInfo directoryInfo = new DirectoryInfo(inf.Logpath); + directoryInfo.Create();//创建日志路径 } - catch { } } - } - else - { - DirectoryInfo directoryInfo = new DirectoryInfo(logpath); - directoryInfo.Create();//创建日志路径 + catch (Exception ) { } + if (LogGingQueue.Count == 0) break; } } + public static void ERRDATA(System.Exception dat) - { - string Log_time = DateTime.Now.ToString("yyyy-MM-dd"); - string logpath = System.Environment.CurrentDirectory + "\\ERR";//日志文件目录 - // string logPathtxt = "" + System.Environment.CurrentDirectory + "\\Log\\"+ Log_time + "Log.txt";//日志文件 - // System.IO.DirectoryInfo log = new System.IO.DirectoryInfo();//生成日志文件目录 - string log_path = logpath + "\\ERR" + Log_time + ".txt"; - string Log_timehms = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); - if (Directory.Exists(logpath))//检查日志路径 + { + LOGinf ginf = new LOGinf { - if (!File.Exists(log_path))//检查文件并写入 - { - // FileStream fs = new FileStream(log_path, FileMode.CreateNew, FileAccess.Write);//创建文件 - // StreamWriter wr = new StreamWriter(fs);//创建文件 - // wr.Close(); - FileStream fil = new FileStream(log_path, FileMode.CreateNew, FileAccess.Write);//创建写入文件 - StreamWriter wfil = new StreamWriter(fil);//创建文件 - wfil.WriteLine("[" + Log_timehms + "];[Error] ||" + Environment.NewLine.ToString()); - wfil.WriteLine("[" + Log_timehms + "];[Error source] ||" + dat.Source.ToString() + Environment.NewLine.ToString()); - wfil.WriteLine("[" + Log_timehms + "];[Error message] ||" + dat.Message.ToString() + Environment.NewLine.ToString()); - wfil.WriteLine("[" + Log_timehms + "];[Error area] ||" + dat.StackTrace.ToString()); - wfil.Close(); - } - else + Logpath = System.Environment.CurrentDirectory + "\\ERR",//日志文件目录 + LogPath = "" + System.Environment.CurrentDirectory + "\\ERR\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt",//日志文件 + Log_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + DAT = dat + }; + ERRQueue.Enqueue(ginf); + + if (ERRQueue.Count == 1) ERRQueueW(); + } + public static async void ERRQueueW() + { + while (true) + { + try { - FileStream fs = new FileStream(log_path, FileMode.Append, FileAccess.Write);//创建写入文件 - StreamWriter wr = new StreamWriter(fs);//创建文件 - wr.WriteLine("[" + Log_timehms + "];[Error] ||" + Environment.NewLine.ToString()); - wr.WriteLine("[" + Log_timehms + "];[Error source] ||" + dat.ToString() + Environment.NewLine.ToString()); - wr.WriteLine("[" + Log_timehms + "];[Error message] ||" + dat.Message.ToString() + Environment.NewLine.ToString()); - wr.WriteLine("[" + Log_timehms + "];[Error area] ||" + dat.ToString()); - wr.Close(); + LOGinf inf = ERRQueue.Dequeue(); + Exception dat = (Exception)inf.DAT; + + if (Directory.Exists(inf.Logpath))//检查日志路径 + { + if (!File.Exists(inf.LogPath))//检查文件并写入 + { + // FileStream fs = new FileStream(log_path, FileMode.CreateNew, FileAccess.Write);//创建文件 + // StreamWriter wr = new StreamWriter(fs);//创建文件 + // wr.Close(); + FileStream fil = new FileStream(inf.LogPath, FileMode.CreateNew, FileAccess.Write);//创建写入文件 + StreamWriter wfil = new StreamWriter(fil);//创建文件 + wfil.WriteLine("[" + inf.Log_time + "];[Error] ||" + Environment.NewLine.ToString()); + wfil.WriteLine("[" + inf.Log_time + "];[Error source] ||" + dat.Source.ToString() + Environment.NewLine.ToString()); + wfil.WriteLine("[" + inf.Log_time + "];[Error message] ||" + dat.Message.ToString() + Environment.NewLine.ToString()); + wfil.WriteLine("[" + inf.Log_time + "];[Error area] ||" + dat.StackTrace.ToString()); + wfil.Close(); + } + else + { + FileStream fs = new FileStream(inf.LogPath, FileMode.Append, FileAccess.Write);//创建写入文件 + StreamWriter wr = new StreamWriter(fs);//创建文件 + wr.WriteLine("[" + inf.Log_time + "];[Error] ||" + Environment.NewLine.ToString()); + wr.WriteLine("[" + inf.Log_time + "];[Error source] ||" + dat.ToString() + Environment.NewLine.ToString()); + wr.WriteLine("[" + inf.Log_time + "];[Error message] ||" + dat.Message.ToString() + Environment.NewLine.ToString()); + wr.WriteLine("[" + inf.Log_time + "];[Error area] ||" + dat.ToString()); + wr.Close(); + } + } + else + { + DirectoryInfo directoryInfo = new DirectoryInfo(inf.Logpath); + directoryInfo.Create(); + } } - } - else - { - DirectoryInfo directoryInfo = new DirectoryInfo(logpath); - directoryInfo.Create(); + catch (Exception) { } + if (ERRQueue.Count == 0) break; } } + public static void ExchangeDATA(string dat) { string Log_time = DateTime.Now.ToString("yyyy-MM-dd"); diff --git a/UserClass/NetFwManger.cs b/UserClass/NetFwManger.cs index 0fed532..3714871 100644 --- a/UserClass/NetFwManger.cs +++ b/UserClass/NetFwManger.cs @@ -15,62 +15,75 @@ namespace SunlightAggregationManager.UserClass public static void AllowPort(int port, string protocol) { + try + { + DelPort(port, protocol); + //创建一个INetFwRule对象 + Type type = Type.GetTypeFromProgID("HNetCfg.FwRule") ?? throw new + InvalidOperationException("Failed to retrieve HNetCfg.FwRule type. Ensure the COM component is registered."); + INetFwRule? rule = (INetFwRule?)Activator.CreateInstance(type); + + //设置规则的属性 + rule?.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW; //允许连接 + rule?.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN; //入站规则 + rule?.Enabled = true; //启用规则 + rule?.InterfaceTypes = "All"; //适用于所有网络接口 + rule?.Name = GetName(port, protocol); //规则名称 + if (protocol.ToLower() == "tcp") + { + rule?.Protocol = (int)NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP; //TCP协议 + } + else + { + rule?.Protocol = (int)NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_UDP; //UDP协议 + } - DelPort(port, protocol); - //创建一个INetFwRule对象 - Type type = Type.GetTypeFromProgID("HNetCfg.FwRule") ?? throw new - InvalidOperationException("Failed to retrieve HNetCfg.FwRule type. Ensure the COM component is registered."); - INetFwRule? rule = (INetFwRule?)Activator.CreateInstance(type); + rule?.LocalPorts = "" + port; //本地端口号 - //设置规则的属性 - rule?.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW; //允许连接 - rule?.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN; //入站规则 - rule?.Enabled = true; //启用规则 - rule?.InterfaceTypes = "All"; //适用于所有网络接口 - rule?.Name = GetName(port, protocol); //规则名称 - if (protocol.ToLower() == "tcp") - { - rule?.Protocol = (int)NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_TCP; //TCP协议 + //获取FirewallPolicy对象 + Type policyType = Type.GetTypeFromProgID("HNetCfg.FwPolicy2") ?? throw new + InvalidOperationException("Failed to retrieve HNetCfg.FwRule type. Ensure the COM component is registered."); + INetFwPolicy2? policy = (INetFwPolicy2?)Activator.CreateInstance(policyType); + + //将规则添加到防火墙策略中 + policy?.Rules.Add(rule); + Console.WriteLine("Add firewall port:" + port); } - else + catch (Exception ex) { - rule?.Protocol = (int)NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_UDP; //UDP协议 + Console.WriteLine(ex.ToString()); } - - rule?.LocalPorts = "" + port; //本地端口号 - - //获取FirewallPolicy对象 - Type policyType = Type.GetTypeFromProgID("HNetCfg.FwPolicy2") ?? throw new - InvalidOperationException("Failed to retrieve HNetCfg.FwRule type. Ensure the COM component is registered."); - INetFwPolicy2? policy = (INetFwPolicy2?)Activator.CreateInstance(policyType); - - //将规则添加到防火墙策略中 - policy?.Rules.Add(rule); - Console.WriteLine("Add firewall port:"+port); } public static void DelPort(int port, string protocol) { - //获取FirewallPolicy对象 - Type policyType = Type.GetTypeFromProgID("HNetCfg.FwPolicy2") ?? throw new - InvalidOperationException("Failed to retrieve HNetCfg.FwRule type. Ensure the COM component is registered."); - INetFwPolicy2? policy = (INetFwPolicy2?)Activator.CreateInstance(policyType); - - //获取现有的规则集合 - INetFwRules? rules = policy?.Rules; - if (rules != null) + try { - //查找名称的规则并删除它 - foreach (INetFwRule rule in rules) + //获取FirewallPolicy对象 + Type policyType = Type.GetTypeFromProgID("HNetCfg.FwPolicy2") ?? throw new + InvalidOperationException("Failed to retrieve HNetCfg.FwRule type. Ensure the COM component is registered."); + INetFwPolicy2? policy = (INetFwPolicy2?)Activator.CreateInstance(policyType); + + //获取现有的规则集合 + INetFwRules? rules = policy?.Rules; + if (rules != null) { - if (rule.Name == GetName(port, protocol)) + //查找名称的规则并删除它 + foreach (INetFwRule rule in rules) { - rules.Remove(rule.Name); - //Console.WriteLine(@"Firewall rule deleted successfully."); - break; + if (rule.Name == GetName(port, protocol)) + { + rules.Remove(rule.Name); + //Console.WriteLine(@"Firewall rule deleted successfully."); + break; + } } } } + catch (Exception ex) + { + Console.WriteLine(ex.ToString()); + } } } }