refactor: Add GetModeControllerByType

This commit is contained in:
ChsBuffer
2020-10-16 15:40:00 +08:00
parent 1b6fe29085
commit 7bbffb002f
2 changed files with 43 additions and 33 deletions

View File

@@ -133,45 +133,20 @@ namespace Netch.Controllers
private static async Task<bool> 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;
}
/// <summary>
@@ -180,6 +155,7 @@ namespace Netch.Controllers
public static async Task Stop()
{
UsingPorts.Clear();
StatusPortInfoText.Reset();
_ = Task.Run(() => NTTController.Stop());

View File

@@ -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;
}
}
}