添加关闭异常连接

This commit is contained in:
Administrator committed 2026-08-03 21:52:35 +08:00
commit 09d572abce
2 files changed
+85 -15

No files matched your search

+81 -15
View File
@@ -30,7 +30,17 @@ namespace ForwardingServerUI.Class
//TcpService service = new TcpService(); //TcpService service = new TcpService();
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) => { //离线记录
DataRow[] dat = MainWindowViewModel._machineTable.Select("ID='" + client.Id + "'");
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 ID " + client.Id + " IP " + client.IP);
return EasyTask.CompletedTask; };//有客户端正在断开连接,只有当主动断开时才有效。
service.Closed = (client, e) => { service.Closed = (client, e) => {
//离线记录 //离线记录
DataRow[] dat = MainWindowViewModel._machineTable.Select("ID='"+client.Id+"'"); DataRow[] dat = MainWindowViewModel._machineTable.Select("ID='"+client.Id+"'");
@@ -40,7 +50,7 @@ namespace ForwardingServerUI.Class
MainWindowViewModel._machineTable.Rows.Remove(row); MainWindowViewModel._machineTable.Rows.Remove(row);
}); });
} }
Console.WriteLine("[" + DateTime.Now.ToString("yyyy-MM-DD HH:mm:ss:fff") + "] NOT ID " + client.Id + " IP " + client.IP); Console.WriteLine("[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff") + "] NOT ID " + client.Id + " IP " + client.IP);
return EasyTask.CompletedTask; return EasyTask.CompletedTask;
};//有客户端断开连接 };//有客户端断开连接
@@ -62,6 +72,7 @@ namespace ForwardingServerUI.Class
(trimmedDat[0] == '{' || trimmedDat[0] == '[')) (trimmedDat[0] == '{' || trimmedDat[0] == '['))
{ {
MainWindowViewModel.Person deserializedPerson = JsonSerializer.Deserialize<MainWindowViewModel.Person>(trimmedDat)!; MainWindowViewModel.Person deserializedPerson = JsonSerializer.Deserialize<MainWindowViewModel.Person>(trimmedDat)!;
//转发逻辑 //转发逻辑
var dr = MainWindowViewModel._userTable.Select("Terminal='" + deserializedPerson.Terminal + "'"); var dr = MainWindowViewModel._userTable.Select("Terminal='" + deserializedPerson.Terminal + "'");
if (dr.Length > 0) if (dr.Length > 0)
@@ -74,16 +85,28 @@ namespace ForwardingServerUI.Class
} }
} }
} else if (s_ == 90) { } }
else if (s_ == 90)
{ }
Application.Current.Dispatcher.Invoke(() =>
{
DataRow drEmployee = r_.First();
drEmployee.BeginEdit();
drEmployee["HeartbeatTime"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff");
drEmployee.EndEdit();
drEmployee.AcceptChanges();
});
} }
else else
{ {
Personm deserializedPerson = JsonSerializer.Deserialize<Personm>(DAT)!; Personm deserializedPerson = JsonSerializer.Deserialize<Personm>(DAT)!;
Application.Current.Dispatcher.Invoke(() => { Application.Current.Dispatcher.Invoke(() =>
var mach = MainWindowViewModel._machineTable.Select("Enterprise='" + deserializedPerson.SERVEREnterprise + {
"'and MachineName='" + deserializedPerson.SERVERMachineName + "'"); var mach = MainWindowViewModel._machineTable.Select("Enterprise='" + deserializedPerson.SERVEREnterprise +
"'and MachineName='" + deserializedPerson.SERVERMachineName + "'");
if (mach.Length > 0) if (mach.Length > 0)
{//刷新设备信息表 {
//刷新设备信息表
DataRow dataRow = mach.First(); DataRow dataRow = mach.First();
dataRow.BeginEdit(); dataRow.BeginEdit();
dataRow["ID"] = client.Id; dataRow["ID"] = client.Id;
@@ -96,14 +119,14 @@ namespace ForwardingServerUI.Class
dataRow.AcceptChanges(); dataRow.AcceptChanges();
} }
else else
{//添加设备信息表 {
MainWindowViewModel._machineTable.Rows.Add(client.Id, client.IP, 30, "/" + deserializedPerson.SERVEREnterprise, //添加设备信息表
deserializedPerson.SERVERMachineName, deserializedPerson.MachineVer); MainWindowViewModel._machineTable.Rows.Add(client.Id, client.IP, 30, "/" + deserializedPerson.SERVEREnterprise,
deserializedPerson.SERVERMachineName, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff"), deserializedPerson.MachineVer);
} }
}); });
Console.WriteLine("[" + DateTime.Now.ToString("yyyy-MM-DD HH:mm:ss:fff") + " [LINK ID " + client.Id + " IP " + client.IP + "]\nDATA =" + DAT); Console.WriteLine("[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff") + " [LINK ID " + client.Id + " IP " + client.IP + "]\nDATA =" + DAT);
} }
} }
} }
@@ -133,7 +156,50 @@ namespace ForwardingServerUI.Class
await service.StartAsync();//启动 await service.StartAsync();//启动
Console.WriteLine("TcpServer:Run"); Console.WriteLine("TcpServer:Run");
}
Timer timer = new Timer(TimerCallback, null, TimeSpan.FromSeconds(90), TimeSpan.FromSeconds(30));
}
private static async void TimerCallback(object? state)
{
try
{
int rows = MainWindowViewModel._machineTable.Rows.Count;
for (int i = rows; i > 0; i--)
{
DataRow dataRow = MainWindowViewModel._machineTable.Rows[i];
DateTime dateTime = DateTime.Parse(dataRow["HeartbeatTime"].ToString()!);
if (DateTime.Now > dateTime.AddSeconds(180))
{
//标记无回应连接
await Application.Current.Dispatcher.Invoke(async () =>
{
dataRow.BeginEdit();
dataRow["Start"] = 999;
dataRow.EndEdit();
dataRow.AcceptChanges();
});
//关闭无回应连接
foreach (var item in service.Clients)
{
if (item.Id == dataRow["ID"].ToString())
{
await item.CloseAsync();
//在断开连接后,释放对象。
item.Dispose();
}
}
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
LogGing.ERRDATA(ex);
}
}
} }
} }
+4
View File
@@ -6,6 +6,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data; using System.Data;
using System.Text; using System.Text;
using TouchSocket.Sockets;
namespace ForwardingServerUI namespace ForwardingServerUI
{ {
@@ -32,6 +33,7 @@ namespace ForwardingServerUI
_machineTable.Columns.Add("Start", typeof(int)); _machineTable.Columns.Add("Start", typeof(int));
_machineTable.Columns.Add("Enterprise", typeof(string)); _machineTable.Columns.Add("Enterprise", typeof(string));
_machineTable.Columns.Add("MachineName", typeof(string)); _machineTable.Columns.Add("MachineName", typeof(string));
_machineTable.Columns.Add("HeartbeatTime", typeof(string));
_machineTable.Columns.Add("MachineVer", typeof(string)); _machineTable.Columns.Add("MachineVer", typeof(string));
@@ -52,5 +54,7 @@ namespace ForwardingServerUI
{ {
Data(); Data();
} }
} }
} }