From 715d25a6f6c60f9623562201fd2d7a462f55bc9f Mon Sep 17 00:00:00 2001
From: ChsBuffer <33744752+chsbuffer@users.noreply.github.com>
Date: Fri, 7 Aug 2020 22:32:01 +0800
Subject: [PATCH] =?UTF-8?q?NetTraffic()=20=E4=B8=BB=E6=8E=A7=E5=88=B6?=
=?UTF-8?q?=E5=99=A8=E5=BC=95=E7=94=A8=E4=BC=A0=E9=80=92=EF=BC=8C=E8=A1=A5?=
=?UTF-8?q?=E5=85=85=E6=A8=A1=E5=BC=8F=E6=B3=A8=E9=87=8A=EF=BC=8C=E5=90=AF?=
=?UTF-8?q?=E5=8A=A8=E5=8F=AA=E6=A3=80=E6=9F=A5=E9=9C=80=E8=A6=81=E7=94=A8?=
=?UTF-8?q?=E7=9A=84=E7=AB=AF=E5=8F=A3=EF=BC=8C=E8=A1=A5=E5=85=85=E5=B1=9E?=
=?UTF-8?q?=E6=80=A7=E5=8F=AF=E8=AE=BF=E9=97=AE=E6=80=A7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Netch/Controllers/Interface/Controller.cs | 2 +-
Netch/Controllers/MainController.cs | 82 +++++++++++++----------
Netch/Forms/MainForm.Control.cs | 4 +-
Netch/Forms/MainForm.MenuStrip.cs | 10 +--
Netch/Models/Mode.cs | 8 +--
Netch/Utils/Bandwidth.cs | 2 +-
6 files changed, 59 insertions(+), 49 deletions(-)
diff --git a/Netch/Controllers/Interface/Controller.cs b/Netch/Controllers/Interface/Controller.cs
index 8e3b11d7..1d47bffb 100644
--- a/Netch/Controllers/Interface/Controller.cs
+++ b/Netch/Controllers/Interface/Controller.cs
@@ -12,7 +12,7 @@ namespace Netch.Controllers
///
/// 当前状态
///
- public State State { get; set; } = State.Waiting;
+ public State State { get; protected set; } = State.Waiting;
///
/// 停止
diff --git a/Netch/Controllers/MainController.cs b/Netch/Controllers/MainController.cs
index 0108533f..d965f347 100644
--- a/Netch/Controllers/MainController.cs
+++ b/Netch/Controllers/MainController.cs
@@ -19,9 +19,9 @@ namespace Netch.Controllers
///
public static readonly List UsingPorts = new List();
- public EncryptedProxy pEncryptedProxyController;
+ public EncryptedProxy pEncryptedProxyController { get; private set; }
- public ModeController pModeController;
+ public ModeController pModeController { get; private set; }
private Server _savedServer;
private Mode _savedMode;
@@ -33,11 +33,11 @@ namespace Netch.Controllers
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;
+ var text = new StringBuilder();
if (_localAddress == "0.0.0.0")
text.Append(i18N.Translate("Allow other Devices to connect") + " ");
@@ -96,40 +96,38 @@ namespace Netch.Controllers
}
else
{
- switch (server.Type)
+ pEncryptedProxyController = server.Type switch
{
- case "SS":
- pEncryptedProxyController = new SSController();
- break;
- case "SSR":
- pEncryptedProxyController = new SSRController();
- break;
- case "VMess":
- pEncryptedProxyController = new VMessController();
- break;
- case "Trojan":
- pEncryptedProxyController = new TrojanController();
- break;
- }
+ "SS" => new SSController(),
+ "SSR" => new SSRController(),
+ "VMess" => new VMessController(),
+ "Trojan" => new TrojanController(),
+ _ => pEncryptedProxyController
+ };
KillProcessByName(pEncryptedProxyController.MainFile);
// 检查端口是否被占用
- if (PortHelper.PortInUse(Global.Settings.Socks5LocalPort))
+ var isPortNotAvailable = false;
+ if (_savedServer.Type != "Socks5")
{
- MessageBoxX.Show(i18N.TranslateFormat("The {0} port is in use.", "Socks5"));
- return false;
+ isPortNotAvailable = PortCheckAndShowMessageBox(_socks5Port, "Socks5");
}
- if (PortHelper.PortInUse(Global.Settings.HTTPLocalPort))
+ switch (_savedMode.Type)
{
- MessageBoxX.Show(i18N.TranslateFormat("The {0} port is in use.", "HTTP"));
- return false;
+ case 0:
+ isPortNotAvailable = isPortNotAvailable || PortCheckAndShowMessageBox(_redirectorTCPPort, "Redirector TCP");
+ break;
+ case 3:
+ case 5:
+ isPortNotAvailable = isPortNotAvailable || PortCheckAndShowMessageBox(_httpPort, "HTTP");
+ break;
}
- if (PortHelper.PortInUse(Global.Settings.RedirectorTCPPort, PortType.TCP))
+ if (isPortNotAvailable)
{
- MessageBoxX.Show(i18N.TranslateFormat("The {0} port is in use.", "Redirector TCP"));
+ Logging.Error("主控制器启动失败: 端口被占用");
return false;
}
@@ -139,6 +137,9 @@ namespace Netch.Controllers
if (result)
{
+ // 加密代理成功启动
+ UsingPorts.Add(Global.Settings.Socks5LocalPort); // 记录Socks5使用端口
+
switch (mode.Type)
{
case 0: // 进程代理模式
@@ -165,24 +166,19 @@ namespace Netch.Controllers
if (result)
{
- #region Add UsingPorts
+ // 成功启动
- switch (mode.Type)
+ switch (mode.Type) // 记录使用端口
{
- // 成功启动
+ case 0:
+ UsingPorts.Add(_redirectorTCPPort);
+ break;
case 3:
case 5:
- UsingPorts.Add(Global.Settings.HTTPLocalPort);
- break;
- case 0:
- UsingPorts.Add(Global.Settings.RedirectorTCPPort);
+ UsingPorts.Add(_httpPort);
break;
}
- if (server.Type != "Socks5")
- UsingPorts.Add(Global.Settings.Socks5LocalPort);
-
- #endregion
switch (mode.Type)
{
@@ -243,5 +239,19 @@ namespace Netch.Controllers
// ignored
}
}
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// 端口是否被占用
+ private static bool PortCheckAndShowMessageBox(int port, string portName, PortType portType = PortType.Both)
+ {
+ if (!PortHelper.PortInUse(port, portType)) return false;
+ MessageBoxX.Show(i18N.TranslateFormat("The {0} port is in use.", portName));
+ return true;
+ }
}
}
\ No newline at end of file
diff --git a/Netch/Forms/MainForm.Control.cs b/Netch/Forms/MainForm.Control.cs
index 512d07d1..6f1a1ab5 100644
--- a/Netch/Forms/MainForm.Control.cs
+++ b/Netch/Forms/MainForm.Control.cs
@@ -56,7 +56,7 @@ namespace Netch.Forms
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);
+ MessageBoxX.Show(e.Message + "\n\n" + i18N.Translate("Missing File or runtime components"), owner: this);
Netch.Application_OnException(null, new ThreadExceptionEventArgs(e));
}
});
@@ -64,7 +64,7 @@ namespace Netch.Forms
if (result)
{
State = State.Started;
- _ = Task.Run(() => { Bandwidth.NetTraffic(server, mode, _mainController); });
+ _ = Task.Run(() => { Bandwidth.NetTraffic(server, mode, ref _mainController); });
// 如果勾选启动后最小化
if (Global.Settings.MinimizeWhenStarted)
{
diff --git a/Netch/Forms/MainForm.MenuStrip.cs b/Netch/Forms/MainForm.MenuStrip.cs
index 5a3bc5f6..28da224d 100644
--- a/Netch/Forms/MainForm.MenuStrip.cs
+++ b/Netch/Forms/MainForm.MenuStrip.cs
@@ -131,7 +131,7 @@ namespace Netch.Forms
_mainController.Start(ServerComboBox.SelectedItem as Models.Server, mode);
}
- var mutex = new Mutex();
+ var serverLock = new object();
await Task.WhenAll(Global.Settings.SubscribeLink.Select(async item => await Task.Run(async () =>
{
@@ -154,10 +154,10 @@ namespace Netch.Forms
// ignored
}
- mutex.WaitOne();
- Global.Settings.Server = Global.Settings.Server.Where(server => server.Group != item.Remark).ToList();
- mutex.ReleaseMutex();
-
+ lock (serverLock)
+ {
+ Global.Settings.Server = Global.Settings.Server.Where(server => server.Group != item.Remark).ToList();
+ }
var result = ShareLink.Parse(str);
diff --git a/Netch/Models/Mode.cs b/Netch/Models/Mode.cs
index 42ed1d09..183ff2eb 100644
--- a/Netch/Models/Mode.cs
+++ b/Netch/Models/Mode.cs
@@ -17,10 +17,10 @@ namespace Netch.Models
///
/// 类型
- /// 0. 进程加速
- /// 1. TUN/TAP 规则内 IP CIDR 加速
- /// 2. TUN/TAP 全局,绕过规则内 IP CIDR
- /// 3. HTTP 代理(自动设置到系统代理)
+ /// 0. Socks5 + 进程加速
+ /// 1. Socks5 + TUN/TAP 规则内 IP CIDR 加速
+ /// 2. Socks5 + TUN/TAP 全局,绕过规则内 IP CIDR
+ /// 3. Socks5 + HTTP 代理(自动设置到系统代理)
/// 4. Socks5 代理(不自动设置到系统代理)
/// 5. Socks5 + HTTP 代理(不自动设置到系统代理)
///
diff --git a/Netch/Utils/Bandwidth.cs b/Netch/Utils/Bandwidth.cs
index e1bc88d9..503d5d11 100644
--- a/Netch/Utils/Bandwidth.cs
+++ b/Netch/Utils/Bandwidth.cs
@@ -43,7 +43,7 @@ namespace Netch.Utils
/// 根据程序名统计流量
///
///
- public static void NetTraffic(Server server, Mode mode, MainController mainController)
+ public static void NetTraffic(Server server, Mode mode, ref MainController mainController)
{
var counterLock = new object();
//int sent = 0;