From c6a1712f079889f9a80701b82866af0728a14cc3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=91=E5=B9=B4=E9=83=8E=E7=A7=83=E5=A4=B4=E5=91=80?=
<1069410172@qq.com>
Date: Mon, 22 Apr 2024 22:38:36 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=A1=8C=E9=9D=A2=E5=85=B1?=
=?UTF-8?q?=E4=BA=AB=E7=9A=84=E4=B8=80=E4=BA=9B=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../cmonitor.notify.win.csproj.user | 8 +----
.../cmonitor.viewer.server.win.csproj.user | 5 ---
cmonitor.web/src/views/Head.vue | 11 ++++---
cmonitor.web/src/views/device/wraps/Items.vue | 1 +
cmonitor.web/src/views/provide.js | 2 +-
cmonitor/client/config/Config.cs | 17 +++++++---
.../plugins/report/ReportApiController.cs | 2 +-
.../plugins/screen/ScreenApiController.cs | 2 +-
.../viewer/messenger/ViewerMessenger.cs | 12 +++----
cmonitor/plugins/viewer/proxy/ViewerProxy.cs | 10 ++++--
.../plugins/viewer/proxy/ViewerProxyClient.cs | 2 +-
.../plugins/viewer/proxy/ViewerProxyServer.cs | 2 +-
cmonitor/plugins/viewer/report/IViewer.cs | 5 +++
.../plugins/viewer/report/ViewerReport.cs | 31 +++++++++++++------
.../plugins/viewer/report/ViewerWindows.cs | 18 +++++++----
.../plugins/wlan/messenger/WlanMessenger.cs | 8 +----
common.libs/FpsHelper.cs | 14 +++++----
17 files changed, 87 insertions(+), 63 deletions(-)
diff --git a/cmonitor.notify.win/cmonitor.notify.win.csproj.user b/cmonitor.notify.win/cmonitor.notify.win.csproj.user
index cf98a901..317a8c7b 100644
--- a/cmonitor.notify.win/cmonitor.notify.win.csproj.user
+++ b/cmonitor.notify.win/cmonitor.notify.win.csproj.user
@@ -1,8 +1,2 @@
-
-
-
- Form
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/cmonitor.viewer.server.win/cmonitor.viewer.server.win.csproj.user b/cmonitor.viewer.server.win/cmonitor.viewer.server.win.csproj.user
index 48878f14..0163cbd7 100644
--- a/cmonitor.viewer.server.win/cmonitor.viewer.server.win.csproj.user
+++ b/cmonitor.viewer.server.win/cmonitor.viewer.server.win.csproj.user
@@ -3,9 +3,4 @@
<_LastSelectedProfileId>D:\desktop\cmonitor\cmonitor.viewer.server.win\Properties\PublishProfiles\FolderProfile.pubxml
-
-
- Form
-
-
\ No newline at end of file
diff --git a/cmonitor.web/src/views/Head.vue b/cmonitor.web/src/views/Head.vue
index 4363591e..76016853 100644
--- a/cmonitor.web/src/views/Head.vue
+++ b/cmonitor.web/src/views/Head.vue
@@ -1,8 +1,10 @@
-
+
-
+
@@ -10,7 +12,8 @@
确 定
-
+
@@ -65,7 +68,7 @@ export default {
}).catch(() => { });
}
const handleConnect = () => {
- //initWebsocket(`ws://192.168.1.18:1801`);
+ //initWebsocket(`ws://hk.cmonitor.snltty.com:1801`);
initWebsocket(`ws://${state.api}`);
localStorage.setItem('api', state.api);
}
diff --git a/cmonitor.web/src/views/device/wraps/Items.vue b/cmonitor.web/src/views/device/wraps/Items.vue
index 0b162072..49bd64f8 100644
--- a/cmonitor.web/src/views/device/wraps/Items.vue
+++ b/cmonitor.web/src/views/device/wraps/Items.vue
@@ -135,6 +135,7 @@ export default {
//有哪些需要报告
const reportDoms = doms.filter(item => item.index >= middleItem.index - 2 && item.index <= middleItem.index + 2).map(c => c.index);
globalData.value.reportNames = globalData.value.devices
+ .filter(c => c.Connected)
.filter((value, index) => reportDoms.indexOf(index) >= 0)
.map(c => c.MachineName);
} catch (e) {
diff --git a/cmonitor.web/src/views/provide.js b/cmonitor.web/src/views/provide.js
index 8aaf6302..f77b628a 100644
--- a/cmonitor.web/src/views/provide.js
+++ b/cmonitor.web/src/views/provide.js
@@ -23,7 +23,7 @@ export const provideGlobalData = () => {
devices: computed(() => {
const user = globalData.value.usernames[globalData.value.username];
if (user) {
- return globalData.value.allDevices.filter(c => user.Devices.indexOf(c.MachineName) >= 0);
+ return globalData.value.allDevices.filter(c => (user.Devices || []).indexOf(c.MachineName) >= 0);
}
return [];
}),
diff --git a/cmonitor/client/config/Config.cs b/cmonitor/client/config/Config.cs
index 2f0bc9a3..718c5563 100644
--- a/cmonitor/client/config/Config.cs
+++ b/cmonitor/client/config/Config.cs
@@ -18,12 +18,19 @@ namespace cmonitor.config
get => server; set
{
server = value;
- if (string.IsNullOrWhiteSpace(server) == false)
+ try
{
- string[] arr = server.Split(':');
- int port = arr.Length == 2 ? int.Parse(arr[1]) : 1802;
- IPAddress ip = NetworkHelper.GetDomainIp(arr[0]);
- ServerEP = new IPEndPoint(ip, port);
+ if (string.IsNullOrWhiteSpace(server) == false)
+ {
+ string[] arr = server.Split(':');
+ int port = arr.Length == 2 ? int.Parse(arr[1]) : 1802;
+ IPAddress ip = NetworkHelper.GetDomainIp(arr[0]);
+ ServerEP = new IPEndPoint(ip, port);
+ }
+ }
+ catch (Exception ex)
+ {
+ Logger.Instance.Error($"{server}->{ex}");
}
}
}
diff --git a/cmonitor/plugins/report/ReportApiController.cs b/cmonitor/plugins/report/ReportApiController.cs
index 11364073..2079ece7 100644
--- a/cmonitor/plugins/report/ReportApiController.cs
+++ b/cmonitor/plugins/report/ReportApiController.cs
@@ -15,7 +15,7 @@ namespace cmonitor.plugins.report
private readonly SignCaching signCaching;
private readonly IApiServer clientServer;
private readonly Config config;
- private readonly FpsHelper fpsHelper;
+ private readonly FpsHelper fpsHelper = new FpsHelper();
public ReportApiController(MessengerSender messengerSender, SignCaching signCaching, IApiServer clientServer, Config config)
{
diff --git a/cmonitor/plugins/screen/ScreenApiController.cs b/cmonitor/plugins/screen/ScreenApiController.cs
index bbed0df7..efb34256 100644
--- a/cmonitor/plugins/screen/ScreenApiController.cs
+++ b/cmonitor/plugins/screen/ScreenApiController.cs
@@ -16,7 +16,7 @@ namespace cmonitor.plugins.screen
private readonly MessengerSender messengerSender;
private readonly SignCaching signCaching;
private readonly Config config;
- private readonly FpsHelper fpsHelper;
+ private readonly FpsHelper fpsHelper = new FpsHelper();
public ScreenApiController(MessengerSender messengerSender, SignCaching signCaching, Config config)
{
diff --git a/cmonitor/plugins/viewer/messenger/ViewerMessenger.cs b/cmonitor/plugins/viewer/messenger/ViewerMessenger.cs
index 27f24d5b..4957cdc2 100644
--- a/cmonitor/plugins/viewer/messenger/ViewerMessenger.cs
+++ b/cmonitor/plugins/viewer/messenger/ViewerMessenger.cs
@@ -42,20 +42,20 @@ namespace cmonitor.plugins.viewer.messenger
[MessengerId((ushort)ViewerMessengerIds.ProxyFromClient)]
- public async Task ProxyFromClient(IConnection connection)
+ public void ProxyFromClient(IConnection connection)
{
ViewerProxyInfo proxy = MemoryPackSerializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span);
proxy.TargetEP = runningConfig.Data.Viewer.ConnectEP;
- await viewerProxyClient.Connect(proxy);
+ _ = viewerProxyClient.Connect(proxy);
}
[MessengerId((ushort)ViewerMessengerIds.ProxyFromServer)]
- public async Task ProxyFromServer(IConnection connection)
+ public void ProxyFromServer(IConnection connection)
{
ViewerProxyInfo proxy = MemoryPackSerializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span);
- proxy.ProxyEP = new System.Net.IPEndPoint(clientSignInState.Connection.Address.Address,config.Data.Client.Viewer.ProxyPort);
+ proxy.ProxyEP = new System.Net.IPEndPoint(clientSignInState.Connection.Address.Address, config.Data.Client.Viewer.ProxyPort);
proxy.TargetEP = runningConfig.Data.Viewer.ConnectEP;
- await viewerProxyClient.Connect(proxy);
+ _ = viewerProxyClient.Connect(proxy);
}
}
@@ -96,7 +96,7 @@ namespace cmonitor.plugins.viewer.messenger
public void ProxyNotify(IConnection connection)
{
ViewerProxyInfo proxy = MemoryPackSerializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span);
- if (signCaching.Get(proxy.ViewerMachine, out SignCacheInfo cache) && cache.Connected)
+ if (signCaching.Get(proxy.ViewerServerMachine, out SignCacheInfo cache) && cache.Connected)
{
_ = messengerSender.SendOnly(new MessageRequestWrap
{
diff --git a/cmonitor/plugins/viewer/proxy/ViewerProxy.cs b/cmonitor/plugins/viewer/proxy/ViewerProxy.cs
index 359e7dd5..193fed50 100644
--- a/cmonitor/plugins/viewer/proxy/ViewerProxy.cs
+++ b/cmonitor/plugins/viewer/proxy/ViewerProxy.cs
@@ -242,7 +242,7 @@ namespace cmonitor.plugins.viewer.proxy
{
await Task.CompletedTask;
}
- public async Task Connect(ViewerProxyInfo viewerProxyInfo)
+ public async Task Connect(ViewerProxyInfo viewerProxyInfo)
{
Socket proxySocket = null;
Socket targetSocket = null;
@@ -265,13 +265,18 @@ namespace cmonitor.plugins.viewer.proxy
BindReceiveTarget(new AsyncUserToken { SourceSocket = proxySocket, TargetSocket = targetSocket });
BindReceiveTarget(new AsyncUserToken { SourceSocket = targetSocket, TargetSocket = proxySocket });
+
+ return true;
}
catch (Exception ex)
{
+ Logger.Instance.Error($"proxy ep:{viewerProxyInfo.ProxyEP}");
+ Logger.Instance.Error($"target ep:{viewerProxyInfo.TargetEP}");
Logger.Instance.Error(ex);
proxySocket?.SafeClose();
targetSocket?.SafeClose();
}
+ return false;
}
@@ -363,7 +368,6 @@ namespace cmonitor.plugins.viewer.proxy
}
}
-
private void CloseClientSocket(SocketAsyncEventArgs e)
{
if (e == null) return;
@@ -417,7 +421,7 @@ namespace cmonitor.plugins.viewer.proxy
{
public uint ConnectId { get; set; }
- public string ViewerMachine { get; set; }
+ public string ViewerServerMachine { get; set; }
[MemoryPackAllowSerialize]
public IPEndPoint ProxyEP { get; set; }
diff --git a/cmonitor/plugins/viewer/proxy/ViewerProxyClient.cs b/cmonitor/plugins/viewer/proxy/ViewerProxyClient.cs
index 1e624853..71102c39 100644
--- a/cmonitor/plugins/viewer/proxy/ViewerProxyClient.cs
+++ b/cmonitor/plugins/viewer/proxy/ViewerProxyClient.cs
@@ -36,7 +36,7 @@ namespace cmonitor.plugins.viewer.proxy
{
ConnectId = connectId,
ProxyEP = new System.Net.IPEndPoint(clientSignInState.Connection.LocalAddress.Address, LocalEndpoint.Port),
- ViewerMachine = runningConfig.Data.Viewer.ServerMachine
+ ViewerServerMachine = runningConfig.Data.Viewer.ServerMachine
})
});
}
diff --git a/cmonitor/plugins/viewer/proxy/ViewerProxyServer.cs b/cmonitor/plugins/viewer/proxy/ViewerProxyServer.cs
index b6b74553..a0940224 100644
--- a/cmonitor/plugins/viewer/proxy/ViewerProxyServer.cs
+++ b/cmonitor/plugins/viewer/proxy/ViewerProxyServer.cs
@@ -32,7 +32,7 @@ namespace cmonitor.plugins.viewer.proxy
{
ConnectId = connectId,
ProxyEP = null,
- ViewerMachine = string.Empty
+ ViewerServerMachine = connection.Name
})
});
}
diff --git a/cmonitor/plugins/viewer/report/IViewer.cs b/cmonitor/plugins/viewer/report/IViewer.cs
index 4d14599c..d1708f97 100644
--- a/cmonitor/plugins/viewer/report/IViewer.cs
+++ b/cmonitor/plugins/viewer/report/IViewer.cs
@@ -28,6 +28,7 @@ namespace cmonitor.plugins.viewer.report
public sealed partial class ViewerRunningConfigInfo
{
public ViewerMode Mode { get; set; }
+
public bool Open { get; set; }
public string ShareId { get; set; } = string.Empty;
@@ -52,6 +53,10 @@ namespace cmonitor.plugins.viewer.report
///
[MemoryPackAllowSerialize]
public IPEndPoint ConnectEP { get; set; }
+
+ [JsonIgnore]
+ [MemoryPackIgnore]
+ public int Times { get; set; }
}
public enum ViewerMode : byte
diff --git a/cmonitor/plugins/viewer/report/ViewerReport.cs b/cmonitor/plugins/viewer/report/ViewerReport.cs
index b688a8b8..b0591637 100644
--- a/cmonitor/plugins/viewer/report/ViewerReport.cs
+++ b/cmonitor/plugins/viewer/report/ViewerReport.cs
@@ -11,6 +11,8 @@ using System.Net;
using System.Text.Json;
using cmonitor.plugins.viewer.proxy;
using common.libs.extends;
+using System.Collections.Concurrent;
+using System.Linq;
namespace cmonitor.plugins.viewer.report
{
@@ -54,7 +56,7 @@ namespace cmonitor.plugins.viewer.report
report.Value = Running();
report.Mode = runningConfig.Data.Viewer.Mode;
report.ShareId = runningConfig.Data.Viewer.ShareId;
- if (reportType == ReportType.Full || report.Updated() || shareMemory.ReadVersionUpdated((int)ShareMemoryIndexs.Viewer))
+ if (reportType == ReportType.Full || shareMemory.ReadVersionUpdated((int)ShareMemoryIndexs.Viewer) || report.Updated())
{
return report;
}
@@ -102,7 +104,7 @@ namespace cmonitor.plugins.viewer.report
{
if (info.ConnectStr != runningConfig.Data.Viewer.ConnectStr)
{
- viewer.SetConnectString(ReplaceProxy(info.ConnectStr));
+ viewer.SetConnectString(ReplaceProxy2Client(info.ConnectStr));
}
//未运行,或者不是client模式,或者状态不对,都需要重启一下
bool restart = Running() != true
@@ -122,6 +124,12 @@ namespace cmonitor.plugins.viewer.report
ViewerRunningConfigInfo info = runningConfig.Data.Viewer.ToJsonFormat().DeJson();
info.Mode = ViewerMode.Client;
info.Open = open;
+ //先尝试了客户端代理,不成功,就会自动尝试第二次,就尝试到了服务器代理
+ if (runningConfig.Data.Viewer.Times % 2 == 1)
+ {
+ info.ConnectStr = ReplaceProxy2Server(info.ConnectStr);
+ }
+ runningConfig.Data.Viewer.Times++;
await messengerSender.SendOnly(new MessageRequestWrap
{
@@ -148,7 +156,6 @@ namespace cmonitor.plugins.viewer.report
}
}
-
private async Task GetNewConnectStr()
{
try
@@ -169,7 +176,13 @@ namespace cmonitor.plugins.viewer.report
}
return string.Empty;
}
- private string ReplaceProxy(string connectStr)
+ private void UpdateConnectEP()
+ {
+ IPEndPoint connectEP = viewer.GetConnectEP(runningConfig.Data.Viewer.ConnectStr);
+ runningConfig.Data.Viewer.ConnectEP = connectEP;
+ runningConfig.Data.Update();
+ }
+ private string ReplaceProxy2Client(string connectStr)
{
if (IPAddress.IsLoopback(clientSignInState.Connection.LocalAddress.Address))
{
@@ -179,17 +192,17 @@ namespace cmonitor.plugins.viewer.report
return connectStr
.Replace("{ip}", clientSignInState.Connection.LocalAddress.Address.ToString())
- //.Replace("{port}", "12345");
.Replace("{port}", viewerProxyClient.LocalEndpoint.Port.ToString());
}
- private void UpdateConnectEP()
+ private string ReplaceProxy2Server(string connectStr)
{
- IPEndPoint connectEP = viewer.GetConnectEP(runningConfig.Data.Viewer.ConnectStr);
- runningConfig.Data.Viewer.ConnectEP = connectEP;
- runningConfig.Data.Update();
+ return connectStr
+ .Replace("{ip}", clientSignInState.Connection.Address.Address.ToString())
+ .Replace("{port}", config.Data.Client.Viewer.ProxyPort.ToString());
}
+
private void Open()
{
if (runningConfig.Data.Viewer.Open)
diff --git a/cmonitor/plugins/viewer/report/ViewerWindows.cs b/cmonitor/plugins/viewer/report/ViewerWindows.cs
index 29499855..1df5ab0e 100644
--- a/cmonitor/plugins/viewer/report/ViewerWindows.cs
+++ b/cmonitor/plugins/viewer/report/ViewerWindows.cs
@@ -21,7 +21,7 @@ namespace cmonitor.plugins.viewer.report
if (value)
{
string str = JsonSerializer.Serialize(info);
- string command = $"start cmonitor.viewer.server.win.exe \"{str.Replace("\"","\\\"")}\"";
+ string command = $"start cmonitor.viewer.server.win.exe \"{str.Replace("\"", "\\\"")}\"";
CommandHelper.Windows(string.Empty, new string[] { command }, false);
}
}
@@ -43,12 +43,18 @@ namespace cmonitor.plugins.viewer.report
xmlDoc.LoadXml(connectStr);
var nodes = xmlDoc.DocumentElement["C"]["T"].ChildNodes;
+ for (int i = 0; i < nodes.Count; i++)
+ {
+ var node = nodes[i];
+ var p = node.Attributes["P"].Value;
+ var n = node.Attributes["N"].Value;
- var node = nodes[nodes.Count - 3];
- var p = node.Attributes["P"].Value;
- var n = node.Attributes["N"].Value;
-
- return new IPEndPoint(IPAddress.Parse(n),int.Parse(p));
+ IPAddress ip = IPAddress.Parse(n);
+ if(ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
+ {
+ return new IPEndPoint(ip, int.Parse(p));
+ }
+ }
}
catch (Exception ex)
{
diff --git a/cmonitor/plugins/wlan/messenger/WlanMessenger.cs b/cmonitor/plugins/wlan/messenger/WlanMessenger.cs
index d4f743a1..8bb152e0 100644
--- a/cmonitor/plugins/wlan/messenger/WlanMessenger.cs
+++ b/cmonitor/plugins/wlan/messenger/WlanMessenger.cs
@@ -5,25 +5,19 @@ namespace cmonitor.plugins.wlan.messenger
{
public sealed class WlanClientMessenger : IMessenger
{
- private readonly WlanReport wlanReport;
- public WlanClientMessenger(WlanReport wlanReport)
+ public WlanClientMessenger()
{
- this.wlanReport = wlanReport;
}
[MessengerId((ushort)WlanMessengerIds.Get)]
public void Get(IConnection connection)
{
- //var wifis = wlanReport.WlanEnums();
- //connection.Write(MemoryPackSerializer.Serialize(wifis));
}
[MessengerId((ushort)WlanMessengerIds.Set)]
public void Set(IConnection connection)
{
- //WlanSetInfo value = MemoryPackSerializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span);
- //wlanReport.WlanConnect(value);
}
}
diff --git a/common.libs/FpsHelper.cs b/common.libs/FpsHelper.cs
index a5ad5b8d..61296474 100644
--- a/common.libs/FpsHelper.cs
+++ b/common.libs/FpsHelper.cs
@@ -12,14 +12,16 @@ namespace common.libs
{
if (dic.TryGetValue(name, out FpsInfo info) == false)
{
- info = new FpsInfo { Flag = 0, Time = Environment.TickCount };
+ info = new FpsInfo { Flag = 1, Time = Environment.TickCount };
dic.TryAdd(name, info);
}
-
- long time = info.Time;
- info.Time = Environment.TickCount;
-
- return Interlocked.CompareExchange(ref info.Flag, 0, 1) == 1 && Environment.TickCount - time > 1000 / fps;
+ bool res = info.Flag == 1 && Environment.TickCount - info.Time > 1000 / fps;
+ if (res)
+ {
+ Interlocked.Exchange(ref info.Flag, 0);
+ info.Time = Environment.TickCount;
+ }
+ return res;
}
public void Release(string name)