From 8f7f2e3d1c1ac1038c29504815e1010043eb66e3 Mon Sep 17 00:00:00 2001 From: ChsBuffer <33744752+chsbuffer@users.noreply.github.com> Date: Fri, 7 Aug 2020 11:22:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=BB=E6=8E=A7=E5=88=B6?= =?UTF-8?q?=E5=99=A8=E5=90=AF=E5=8A=A8=E9=98=BB=E5=A1=9EUI=E7=BA=BF?= =?UTF-8?q?=E7=A8=8B=EF=BC=8C=E4=BF=9D=E7=95=99=E8=AE=BE=E7=BD=AE=E6=9D=A5?= =?UTF-8?q?=E9=87=8D=E6=96=B0=E7=94=9F=E6=88=90=E7=8A=B6=E6=80=81=E6=A0=8F?= =?UTF-8?q?=E7=AB=AF=E5=8F=A3=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Netch/Controllers/MainController.cs | 82 +++++++++++++++++++++--- Netch/Forms/MainForm.Control.cs | 97 +++++++---------------------- Netch/Forms/MainForm.MenuStrip.cs | 1 - Netch/Forms/MainForm.Status.cs | 2 + 4 files changed, 100 insertions(+), 82 deletions(-) diff --git a/Netch/Controllers/MainController.cs b/Netch/Controllers/MainController.cs index 1367d6ec..0108533f 100644 --- a/Netch/Controllers/MainController.cs +++ b/Netch/Controllers/MainController.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Runtime.InteropServices; +using System.Text; using System.Threading.Tasks; using Netch.Forms; using Netch.Models; @@ -22,11 +23,46 @@ namespace Netch.Controllers public ModeController pModeController; + private Server _savedServer; + private Mode _savedMode; + + public string PortInfo + { + get + { + if (_savedMode == null || _savedServer == null) + return string.Empty; + + var text = new StringBuilder(); + if (_savedServer.Type == "Socks5" && _savedMode.Type != 3 && _savedMode.Type != 5) + // 不可控Socks5, 不可控HTTP + return string.Empty; + + if (_localAddress == "0.0.0.0") + text.Append(i18N.Translate("Allow other Devices to connect") + " "); + + if (_savedServer.Type != "Socks5") + // 可控Socks5 + text.Append($"Socks5 {i18N.Translate("Local Port", ": ")}{_socks5Port}"); + + if (_savedMode.Type == 3 || _savedMode.Type == 5) + // 有HTTP + text.Append($" | HTTP {i18N.Translate("Local Port", ": ")}{_httpPort}"); + + return $" ({text})"; + } + } + /// /// NTT 控制器 /// public NTTController pNTTController = new NTTController(); + private string _localAddress; + private int _redirectorTCPPort; + private int _httpPort; + private int _socks5Port; + [DllImport("dnsapi", EntryPoint = "DnsFlushResolverCache")] public static extern uint FlushDNSResolverCache(); @@ -39,6 +75,18 @@ namespace Netch.Controllers public bool Start(Server server, Mode mode) { Logging.Info($"启动主控制器: {server.Type} [{mode.Type}]{mode.Remark}"); + + #region Record Settings + + _httpPort = Global.Settings.HTTPLocalPort; + _socks5Port = Global.Settings.Socks5LocalPort; + _redirectorTCPPort = Global.Settings.RedirectorTCPPort; + _localAddress = Global.Settings.LocalAddress; + _savedServer = server; + _savedMode = mode; + + #endregion + FlushDNSResolverCache(); bool result; @@ -117,6 +165,25 @@ namespace Netch.Controllers if (result) { + #region Add UsingPorts + + switch (mode.Type) + { + // 成功启动 + case 3: + case 5: + UsingPorts.Add(Global.Settings.HTTPLocalPort); + break; + case 0: + UsingPorts.Add(Global.Settings.RedirectorTCPPort); + break; + } + + if (server.Type != "Socks5") + UsingPorts.Add(Global.Settings.Socks5LocalPort); + + #endregion + switch (mode.Type) { case 0: @@ -148,16 +215,15 @@ namespace Netch.Controllers /// /// 停止 /// - public void Stop() + public async void Stop() { - var tasks = new[] + await Task.WhenAll(new[] { - Task.Factory.StartNew(() => pEncryptedProxyController?.Stop()), - Task.Factory.StartNew(() => UsingPorts.Clear()), - Task.Factory.StartNew(() => pModeController?.Stop()), - Task.Factory.StartNew(() => pNTTController.Stop()) - }; - Task.WaitAll(tasks); + Task.Run(() => pEncryptedProxyController?.Stop()), + Task.Run(() => UsingPorts.Clear()), + Task.Run(() => pModeController?.Stop()), + Task.Run(() => pNTTController.Stop()) + }); } public static void KillProcessByName(string name) diff --git a/Netch/Forms/MainForm.Control.cs b/Netch/Forms/MainForm.Control.cs index 82e40a7f..512d07d1 100644 --- a/Netch/Forms/MainForm.Control.cs +++ b/Netch/Forms/MainForm.Control.cs @@ -44,25 +44,27 @@ namespace Netch.Forms var server = ServerComboBox.SelectedItem as Models.Server; var mode = ModeComboBox.SelectedItem as Models.Mode; - bool result; + var result = false; - try + await Task.Run(() => { - // TODO 完善控制器异常处理 - result = _mainController.Start(server, mode); - } - catch (Exception e) - { - if (e is DllNotFoundException || e is FileNotFoundException) - MessageBoxX.Show(e.Message + "\n\n" + i18N.Translate("Missing File or runtime components"), owner: this); - throw; - } + try + { + // TODO 完善控制器异常处理 + result = _mainController.Start(server, mode); + } + catch (Exception e) + { + if (e is DllNotFoundException || e is FileNotFoundException) + MessageBoxX.Show(e.Message + "\n\n" + i18N.Translate("Missing File or runtime components"), owner: Global.MainForm); + Netch.Application_OnException(null, new ThreadExceptionEventArgs(e)); + } + }); if (result) { State = State.Started; - StatusTextAppend(LocalPortText(server.Type, mode.Type)); - await Task.Run(() => { Bandwidth.NetTraffic(server, mode, _mainController); }); + _ = Task.Run(() => { Bandwidth.NetTraffic(server, mode, _mainController); }); // 如果勾选启动后最小化 if (Global.Settings.MinimizeWhenStarted) { @@ -83,20 +85,13 @@ namespace Netch.Forms // 自动检测延迟 await Task.Run(() => { - while (true) + while (State == State.Started) { - if (State == State.Started) - { - server.Test(); - // 重载服务器列表 - InitServer(); + server.Test(); + // 重载服务器列表 + InitServer(); - Thread.Sleep(Global.Settings.StartedTcping_Interval * 1000); - } - else - { - break; - } + Thread.Sleep(Global.Settings.StartedTcping_Interval * 1000); } }); } @@ -109,58 +104,14 @@ namespace Netch.Forms } else { + // 停止 State = State.Stopping; - await Task.Run(async () => - { - // 停止 - _mainController.Stop(); - State = State.Stopped; - await Task.Run(TestServer); - }); + _mainController.Stop(); + State = State.Stopped; + _ = Task.Run(TestServer); } } - private static string LocalPortText(string serverType, int modeType) - { - var text = new StringBuilder(" ("); - if (Global.Settings.LocalAddress == "0.0.0.0") - text.Append(i18N.Translate("Allow other Devices to connect") + " "); - if (serverType == "Socks5") - { - // 不可控Socks5 - if (modeType == 3 || modeType == 5) - { - // 可控HTTP - MainController.UsingPorts.Add(Global.Settings.HTTPLocalPort); - text.Append($"HTTP {i18N.Translate("Local Port", ": ")}{Global.Settings.HTTPLocalPort}"); - } - else - { - // 不可控HTTP - return string.Empty; - } - } - else - { - // 可控Socks5 - MainController.UsingPorts.Add(Global.Settings.Socks5LocalPort); - text.Append($"Socks5 {i18N.Translate("Local Port", ": ")}{Global.Settings.Socks5LocalPort}"); - if (modeType == 3 || modeType == 5) - { - // 有HTTP - MainController.UsingPorts.Add(Global.Settings.HTTPLocalPort); - text.Append($" | HTTP {i18N.Translate("Local Port", ": ")}{Global.Settings.HTTPLocalPort}"); - } - } - - if (modeType == 0) - MainController.UsingPorts.Add(Global.Settings.RedirectorTCPPort); - - text.Append(")"); - return text.ToString(); - } - - public void OnBandwidthUpdated(long download) { try diff --git a/Netch/Forms/MainForm.MenuStrip.cs b/Netch/Forms/MainForm.MenuStrip.cs index bb0a0046..5a3bc5f6 100644 --- a/Netch/Forms/MainForm.MenuStrip.cs +++ b/Netch/Forms/MainForm.MenuStrip.cs @@ -257,7 +257,6 @@ namespace Netch.Forms }; State = State.Starting; _mainController.Start(ServerComboBox.SelectedItem as Models.Server, mode); - // State = State.Started; } NotifyTip(i18N.Translate("Updating in the background")); diff --git a/Netch/Forms/MainForm.Status.cs b/Netch/Forms/MainForm.Status.cs index 23f7d2b9..227e1406 100644 --- a/Netch/Forms/MainForm.Status.cs +++ b/Netch/Forms/MainForm.Status.cs @@ -60,6 +60,8 @@ namespace Netch.Forms ControlButton.Enabled = true; ControlButton.Text = i18N.Translate("Stop"); + StatusTextAppend(_mainController.PortInfo); + ProfileGroupBox.Enabled = true; UsedBandwidthLabel.Visible /*= UploadSpeedLabel.Visible*/ = DownloadSpeedLabel.Visible = true;