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 @@ - +
@@ -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)