调整心跳超时检查断线逻辑

This commit is contained in:
Administrator committed 2026-08-05 11:51:31 +08:00
commit 07e98cec21
2 files changed
+31 -27

No files matched your search

+1 -9
View File
@@ -142,15 +142,7 @@ namespace ForwardingServerUI.Class
await e.InvokeNext();*/ await e.InvokeNext();*/
} }
} }
} }
+30 -18
View File
@@ -33,24 +33,23 @@ namespace ForwardingServerUI.Class
service.Connecting = (client, e) => { return EasyTask.CompletedTask; };//有客户端正在连接 service.Connecting = (client, e) => { return EasyTask.CompletedTask; };//有客户端正在连接
service.Connected = (client, e) => { return EasyTask.CompletedTask;};//有客户端成功连接 service.Connected = (client, e) => { return EasyTask.CompletedTask;};//有客户端成功连接
service.Closing = (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 " + Console.WriteLine("[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "] NOT ID " +
client.Id + " IP " + client.IP); client.Id + " IP " + client.IP);
DataRow[] dat = MainWindowViewModel._machineTable.Select("ID='"+client.Id+"'"); DataRow row = MainWindowViewModel._machineTable.Select("ID='" + client.Id + "'").First();
foreach (DataRow row in dat)
{
Application.Current.Dispatcher.Invoke(() => {
MainWindowViewModel._machineTable.Rows.Remove(row);
});
Console.WriteLine("[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "] NOT LINK ID = " + Console.WriteLine("[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "] BREAK LINK ID = " +
row["ID"] + " IP = " + row["IP"] + " Enterprise = " + row["Enterprise"] + row["ID"] + " IP = " + row["IP"] + " Enterprise = " + row["Enterprise"] +
" MachineName = " + row["MachineName"]); " MachineName = " + row["MachineName"]);
}
return EasyTask.CompletedTask; Application.Current.Dispatcher.Invoke(() =>
{
MainWindowViewModel._machineTable.Rows.Remove(row);
});
return EasyTask.CompletedTask;
};//有客户端断开连接 };//有客户端断开连接
service.Received = (client, e) =>{ service.Received = (client, e) =>{
string DAT = e.Memory.Span.ToString(Encoding.UTF8); string DAT = e.Memory.Span.ToString(Encoding.UTF8);
@@ -156,7 +155,7 @@ namespace ForwardingServerUI.Class
Console.WriteLine("TcpServer:Run"); 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) private static async void TimerCallback(object? state)
@@ -168,12 +167,24 @@ namespace ForwardingServerUI.Class
{ {
DataRow dataRow = MainWindowViewModel._machineTable.Rows[i-1]; DataRow dataRow = MainWindowViewModel._machineTable.Rows[i-1];
DateTime dateTime = DateTime.Parse(dataRow["HeartbeatTime"].ToString()!); 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)) 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) foreach (var item in service.Clients)
{ {
@@ -186,6 +197,7 @@ namespace ForwardingServerUI.Class
} }
} }
} }
} }
} }
catch (Exception ex) catch (Exception ex)