From 7bbffb002fdd0d5667d35f7173f2f0c3dfdf937b Mon Sep 17 00:00:00 2001 From: ChsBuffer <33744752+chsbuffer@users.noreply.github.com> Date: Fri, 16 Oct 2020 15:40:00 +0800 Subject: [PATCH] refactor: Add GetModeControllerByType --- Netch/Controllers/MainController.cs | 42 +++++++---------------------- Netch/Utils/ModeHelper.cs | 34 +++++++++++++++++++++++ 2 files changed, 43 insertions(+), 33 deletions(-) diff --git a/Netch/Controllers/MainController.cs b/Netch/Controllers/MainController.cs index dc7322b7..72f58ac2 100644 --- a/Netch/Controllers/MainController.cs +++ b/Netch/Controllers/MainController.cs @@ -133,45 +133,20 @@ namespace Netch.Controllers private static async Task StartMode(Server server, Mode mode) { - ushort port = 0; - switch (mode.Type) + ModeController = ModeHelper.GetModeControllerByType(mode.Type, out var port, out var portName, out var portType); + if (port != null) { - case 0: - ModeController = new NFController(); - PortCheckAndShowMessageBox(port = Global.Settings.RedirectorTCPPort, "Redirector TCP"); - break; - case 1: - case 2: - ModeController = new TUNTAPController(); - break; - case 3: - case 5: - ModeController = new HTTPController(); - PortCheckAndShowMessageBox(port = Global.Settings.HTTPLocalPort, "HTTP"); - break; - case 4: - return true; - default: - Logging.Error("未知模式类型"); - return false; + PortCheckAndShowMessageBox((ushort) port, portName, portType); + UsingPorts.Add((ushort) port); } - Global.MainForm.StatusText(i18N.TranslateFormat("Starting {0}", ModeController.Name)); - if (await Task.Run(() => ModeController.Start(mode))) + if (ModeController != null) { - switch (mode.Type) - { - case 3: - case 5: - StatusPortInfoText.HttpPort = port; - break; - } - - UsingPorts.Add(port); - return true; + Global.MainForm.StatusText(i18N.TranslateFormat("Starting {0}", ModeController.Name)); + return await Task.Run(() => ModeController.Start(mode)); } - return false; + return true; } /// @@ -180,6 +155,7 @@ namespace Netch.Controllers public static async Task Stop() { UsingPorts.Clear(); + StatusPortInfoText.Reset(); _ = Task.Run(() => NTTController.Stop()); diff --git a/Netch/Utils/ModeHelper.cs b/Netch/Utils/ModeHelper.cs index d8fc4908..60e7d7d5 100644 --- a/Netch/Utils/ModeHelper.cs +++ b/Netch/Utils/ModeHelper.cs @@ -2,6 +2,8 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using Netch.Controllers; +using Netch.Forms; using Netch.Models; namespace Netch.Utils @@ -132,5 +134,37 @@ namespace Netch.Utils Global.Modes.Remove(mode); Global.MainForm.InitMode(); } + + public static IModeController GetModeControllerByType(int type, out ushort? port, out string portName, out PortType portType) + { + IModeController modeController; + port = null; + portName = string.Empty; + portType = PortType.Both; + switch (type) + { + case 0: + modeController = new NFController(); + port = Global.Settings.RedirectorTCPPort; + portName = "Redirector TCP"; + break; + case 1: + case 2: + modeController = new TUNTAPController(); + break; + case 3: + case 5: + modeController = new HTTPController(); + port = Global.Settings.HTTPLocalPort; + portName = "HTTP"; + MainForm.StatusPortInfoText.HttpPort = (ushort) port; + break; + default: + Logging.Error("未知模式类型"); + throw new StartFailedException(); + } + + return modeController; + } } } \ No newline at end of file