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;