Compare commits

...
2 Commits
2 changed files with 36 additions and 27 deletions

No files matched your search

+34 -27
View File
@@ -4,6 +4,7 @@ using System.Data;
using System.Security.Cryptography.Pkcs; using System.Security.Cryptography.Pkcs;
using System.Text; using System.Text;
using System.Text.Json; using System.Text.Json;
using System.Threading.Channels;
using System.Windows; using System.Windows;
using System.Windows.Markup; using System.Windows.Markup;
using System.Xml.Linq; using System.Xml.Linq;
@@ -38,17 +39,17 @@ namespace ForwardingServerUI.Class
//离线记录 //离线记录
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 row = MainWindowViewModel._machineTable.Select("ID='" + client.Id + "'").First();
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(() => Application.Current.Dispatcher.Invoke(() =>
{ {
DataRow row = MainWindowViewModel._machineTable.Select("ID='" + client.Id + "'").First();
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"]);
MainWindowViewModel._machineTable.Rows.Remove(row); MainWindowViewModel._machineTable.Rows.Remove(row);
}); });
return EasyTask.CompletedTask; return EasyTask.CompletedTask;
};//有客户端断开连接 };//有客户端断开连接
service.Received = (client, e) =>{ service.Received = (client, e) =>{
@@ -162,43 +163,49 @@ namespace ForwardingServerUI.Class
{ {
try try
{ {
int rows = MainWindowViewModel._machineTable.Rows.Count; DataRow[] row = MainWindowViewModel._machineTable.Select("HeartbeatTime<'" + DateTime.Now.AddSeconds(-30).ToString() + "'");
for (int i = rows; i > 0; i--)
{
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(() =>
{
foreach (var dataRow in row)
{ {
Application.Current.Dispatcher.Invoke(() => if ((int)dataRow["Start"] == 30)
{ {
dataRow.BeginEdit(); dataRow.BeginEdit();
dataRow["Start"] = 999; dataRow["Start"] = 999;
dataRow.EndEdit(); dataRow.EndEdit();
dataRow.AcceptChanges(); dataRow.AcceptChanges();
});
Console.WriteLine("[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "] NOT LINK ID = " + Console.WriteLine($"[{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}] NOT LINK ID = {dataRow["ID"]} " +
dataRow["ID"] + " IP = " + dataRow["IP"] + " Enterprise = " + dataRow["Enterprise"] + $"IP = {dataRow["IP"]} Enterprise = {dataRow["Enterprise"]} " +
" MachineName = " + dataRow["MachineName"]); $"MachineName = {dataRow["MachineName"]}");
}
} }
});
if (DateTime.Now > dateTime.AddSeconds(180)) DataRow[] rowout = MainWindowViewModel._machineTable.Select("HeartbeatTime<'" + DateTime.Now.AddSeconds(-120).ToString() + "'");
Application.Current.Dispatcher.Invoke(() =>
{
foreach (var dataRow in rowout)
{ {
//关闭无回应连接 dataRow.BeginEdit();
dataRow["Start"] = 999;
dataRow.EndEdit();
dataRow.AcceptChanges();
foreach (var item in service.Clients) foreach (var item in service.Clients)
{ {
if (item.Id == dataRow["ID"].ToString()) if (item.Id == dataRow["ID"].ToString())
{ {
await item.CloseAsync(); item.CloseAsync(); // 关闭完成
item.Dispose(); // 释放资源
//在断开连接后,释放对象。 break;
item.Dispose();
} }
} }
} }
});
}
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -206,6 +213,6 @@ namespace ForwardingServerUI.Class
LogGing.ERRDATA(ex); LogGing.ERRDATA(ex);
} }
} }
} }
} }
+2
View File
@@ -26,6 +26,8 @@ namespace ForwardingServerUI
[ObservableProperty] [ObservableProperty]
public static DataTable _userTable = new(); public static DataTable _userTable = new();
public static readonly object TableLock = new object();
public async void Data() public async void Data()
{ {
_machineTable.Columns.Add("ID", typeof(string)); _machineTable.Columns.Add("ID", typeof(string));