diff --git a/Class/AsyncHttpServer.cs b/Class/AsyncHttpServer.cs index a7b08ed..5164175 100644 --- a/Class/AsyncHttpServer.cs +++ b/Class/AsyncHttpServer.cs @@ -142,15 +142,7 @@ namespace ForwardingServerUI.Class await e.InvokeNext();*/ } } - - - - - - - - - + } diff --git a/Class/AsyncTcpServer.cs b/Class/AsyncTcpServer.cs index 087d865..b184ad8 100644 --- a/Class/AsyncTcpServer.cs +++ b/Class/AsyncTcpServer.cs @@ -33,24 +33,23 @@ namespace ForwardingServerUI.Class service.Connecting = (client, e) => { return EasyTask.CompletedTask; };//有客户端正在连接 service.Connected = (client, e) => { return EasyTask.CompletedTask;};//有客户端成功连接 service.Closing = (client, e) => { return EasyTask.CompletedTask; };//有客户端正在断开连接,只有当主动断开时才有效。 - service.Closed = (client, e) => { + service.Closed = (client, e) => + { //离线记录 - Console.WriteLine("[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "] NOT ID " + client.Id + " IP " + client.IP); - DataRow[] dat = MainWindowViewModel._machineTable.Select("ID='"+client.Id+"'"); - foreach (DataRow row in dat) - { - Application.Current.Dispatcher.Invoke(() => { - MainWindowViewModel._machineTable.Rows.Remove(row); - }); + DataRow row = MainWindowViewModel._machineTable.Select("ID='" + client.Id + "'").First(); - Console.WriteLine("[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "] NOT LINK ID = " + - row["ID"] + " IP = " + row["IP"] + " Enterprise = " + row["Enterprise"] + - " MachineName = " + row["MachineName"]); - } - return EasyTask.CompletedTask; + Console.WriteLine("[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "] BREAK LINK ID = " + + row["ID"] + " IP = " + row["IP"] + " Enterprise = " + row["Enterprise"] + + " MachineName = " + row["MachineName"]); + + Application.Current.Dispatcher.Invoke(() => + { + MainWindowViewModel._machineTable.Rows.Remove(row); + }); + return EasyTask.CompletedTask; };//有客户端断开连接 service.Received = (client, e) =>{ string DAT = e.Memory.Span.ToString(Encoding.UTF8); @@ -156,7 +155,7 @@ namespace ForwardingServerUI.Class Console.WriteLine("TcpServer:Run"); //启动检查循环定时器 - _timer = new Timer(TimerCallback, null, TimeSpan.FromSeconds(90), TimeSpan.FromSeconds(30)); + _timer = new Timer(TimerCallback, null, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(30)); } private static async void TimerCallback(object? state) @@ -168,12 +167,24 @@ namespace ForwardingServerUI.Class { DataRow dataRow = MainWindowViewModel._machineTable.Rows[i-1]; DateTime dateTime = DateTime.Parse(dataRow["HeartbeatTime"].ToString()!); + + if (DateTime.Now > dateTime.AddSeconds(30) && (int)dataRow["Start"] == 30) + { + Application.Current.Dispatcher.Invoke(() => + { + dataRow.BeginEdit(); + dataRow["Start"] = 999; + dataRow.EndEdit(); + dataRow.AcceptChanges(); + }); + + Console.WriteLine("[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "] NOT LINK ID = " + + dataRow["ID"] + " IP = " + dataRow["IP"] + " Enterprise = " + dataRow["Enterprise"] + + " MachineName = " + dataRow["MachineName"]); + } + if (DateTime.Now > dateTime.AddSeconds(180)) { - Console.WriteLine("[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "] NOT LINK ID = " + - dataRow["ID"] + " IP = " + dataRow["IP"] + " Enterprise = " + dataRow["Enterprise"] + - " MachineName = " + dataRow["MachineName"] ); - //关闭无回应连接 foreach (var item in service.Clients) { @@ -186,6 +197,7 @@ namespace ForwardingServerUI.Class } } } + } } catch (Exception ex)