Refactor: split Global.cs

This commit is contained in:
ChsBuffer
2021-03-25 12:21:42 +08:00
parent 5da5daa112
commit dcb90ccdcd
15 changed files with 45 additions and 82 deletions

10
Netch/Constants.cs Normal file
View File

@@ -0,0 +1,10 @@
namespace Netch
{
public static class Constants
{
public const string EOF = "\r\n";
public const string UserACL = "data\\user.acl";
public const string BuiltinACL = "bin\\default.acl";
public const string ParameterShow = "-show";
}
}

View File

@@ -74,7 +74,7 @@ namespace Netch.Controllers
argument.Append(
$"-tunAddr {Global.Settings.TUNTAP.Address} -tunMask {Global.Settings.TUNTAP.Netmask} -tunGw {Global.Settings.TUNTAP.Gateway} -tunDns {DnsUtils.Join(dns)} -tunName \"{TUNTAP.GetName(_tap.ComponentID)}\" ");
if (Global.Settings.TUNTAP.UseFakeDNS && Global.Flags.SupportFakeDns)
if (Global.Settings.TUNTAP.UseFakeDNS && Flags.SupportFakeDns)
argument.Append("-fakeDns ");
StartInstanceAuto(argument.ToString(), ProcessPriorityClass.RealTime);

14
Netch/Flags.cs Normal file
View File

@@ -0,0 +1,14 @@
using System;
using Netch.Controllers;
namespace Netch
{
public static class Flags
{
public static readonly bool IsWindows10Upper = Environment.OSVersion.Version.Major >= 10;
private static readonly Lazy<bool> LazySupportFakeDns = new(() => new TUNTAPController().TestFakeDNS());
public static bool SupportFakeDns => LazySupportFakeDns.Value;
}
}

View File

@@ -84,8 +84,6 @@ namespace Netch.Forms
private void MainForm_Load(object sender, EventArgs e)
{
Global.LogStopwatch.Log("MainForm ctor (Pre MainForm Load)");
// 计算 ComboBox绘制 目标宽度
RecordSize();
@@ -121,8 +119,6 @@ namespace Netch.Forms
if (Global.Settings.StartWhenOpened)
ControlButton_Click(null, null);
});
Global.LogStopwatch.Log("Post Form Load", true);
}
private void RecordSize()
@@ -448,7 +444,7 @@ namespace Netch.Forms
if (useProxy)
req.Proxy = new WebProxy($"http://127.0.0.1:{Global.Settings.HTTPLocalPort}");
await WebUtil.DownloadFileAsync(req, Path.Combine(Global.NetchDir, Global.UserACL));
await WebUtil.DownloadFileAsync(req, Path.Combine(Global.NetchDir, Constants.UserACL));
NotifyTip(i18N.Translate("ACL updated successfully"));
}
catch (Exception e)
@@ -1238,7 +1234,7 @@ namespace Netch.Forms
{
if (natType > 0 && natType < 5)
{
NatTypeStatusLightLabel.Visible = Global.Flags.IsWindows10Upper;
NatTypeStatusLightLabel.Visible = Flags.IsWindows10Upper;
var c = natType switch
{
1 => Color.LimeGreen,

View File

@@ -235,7 +235,7 @@ namespace Netch.Forms
private void SettingForm_Load(object sender, EventArgs e)
{
TUNTAPUseCustomDNSCheckBox_CheckedChanged(null, null);
Task.Run(() => BeginInvoke(new Action(() => UseFakeDNSCheckBox.Visible = Global.Flags.SupportFakeDns)));
Task.Run(() => BeginInvoke(new Action(() => UseFakeDNSCheckBox.Visible = Flags.SupportFakeDns)));
}
private void TUNTAPUseCustomDNSCheckBox_CheckedChanged(object? sender, EventArgs? e)

View File

@@ -2,9 +2,7 @@ using System;
using System.Collections.Generic;
using System.Text.Encodings.Web;
using System.Text.Json;
using System.Threading;
using System.Windows.Forms;
using Netch.Controllers;
using Netch.Forms;
using Netch.Models;
@@ -12,27 +10,11 @@ namespace Netch
{
public static class Global
{
/// <summary>
/// 换行
/// </summary>
public const string EOF = "\r\n";
public const string UserACL = "data\\user.acl";
public const string BuiltinACL = "bin\\default.acl";
public static readonly string NetchDir = Application.StartupPath;
public static readonly string NetchExecutable = Application.ExecutablePath;
/// <summary>
/// 主窗体的静态实例
/// </summary>
private static readonly Lazy<MainForm> LazyMainForm = new(() => new MainForm());
public static SingleInstance.SingleInstance SingleInstance = new($"Global\\{nameof(Netch)}");
public static LogStopwatch LogStopwatch = null!;
/// <summary>
/// 用于读取和写入的配置
/// </summary>
@@ -43,15 +25,6 @@ namespace Netch
/// </summary>
public static readonly List<Mode> Modes = new();
public static class Flags
{
public static readonly bool IsWindows10Upper = Environment.OSVersion.Version.Major >= 10;
private static readonly Lazy<bool> LazySupportFakeDns = new(() => new TUNTAPController().TestFakeDNS());
public static bool SupportFakeDns => LazySupportFakeDns.Value;
}
/// <summary>
/// 主窗体的静态实例
/// </summary>
@@ -64,6 +37,7 @@ namespace Netch
Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
};
public const string ParameterShow = "-show";
public static readonly string NetchDir = Application.StartupPath;
public static readonly string NetchExecutable = Application.ExecutablePath;
}
}

View File

@@ -1,27 +0,0 @@
using System;
using System.Diagnostics;
namespace Netch.Models
{
public class LogStopwatch
{
public LogStopwatch(string message)
{
_stopwatch = Stopwatch.StartNew();
Console.WriteLine($"Start {message} LogStopwatch");
}
private readonly Stopwatch _stopwatch;
public void Log(string name,bool stop = false)
{
if (!_stopwatch.IsRunning)
throw new Exception();
_stopwatch.Stop();
Console.WriteLine($"{name} LogStopwatch: {_stopwatch.ElapsedMilliseconds}");
if(!stop)
_stopwatch.Start();
}
}
}

View File

@@ -161,7 +161,7 @@ namespace Netch.Models
/// <returns>模式文件字符串</returns>
public string ToFileString()
{
return $"# {Remark}, {Type}, {(BypassChina ? 1 : 0)}{Global.EOF}{string.Join(Global.EOF, Rule)}";
return $"# {Remark}, {Type}, {(BypassChina ? 1 : 0)}{Constants.EOF}{string.Join(Constants.EOF, Rule)}";
}
}

View File

@@ -7,13 +7,14 @@ using System.Threading.Tasks;
using System.Windows.Forms;
using Netch.Controllers;
using Netch.Forms;
using Netch.Models;
using Netch.Utils;
namespace Netch
{
public static class Netch
{
public static readonly SingleInstance.SingleInstance SingleInstance = new($"Global\\{nameof(Netch)}");
/// <summary>
/// 应用程序的主入口点
/// </summary>
@@ -26,7 +27,7 @@ namespace Netch
if (args.Contains("-console"))
AttachConsole();
#endif
Global.LogStopwatch = new LogStopwatch("Netch");
// 设置当前目录
Directory.SetCurrentDirectory(Global.NetchDir);
@@ -42,21 +43,18 @@ namespace Netch
if (!Directory.Exists(item))
Directory.CreateDirectory(item);
Global.LogStopwatch.Log("Clean Old, Create Directory");
// 加载配置
Configuration.Load();
Global.LogStopwatch.Log("Load Configuration");
if (!Global.SingleInstance.IsFirstInstance)
if (!SingleInstance.IsFirstInstance)
{
Global.SingleInstance.PassArgumentsToFirstInstance(args.Append(Global.ParameterShow));
SingleInstance.PassArgumentsToFirstInstance(args.Append(Constants.ParameterShow));
Environment.Exit(0);
return;
}
Global.SingleInstance.ArgumentsReceived.Subscribe(SingleInstance_ArgumentsReceived);
Global.SingleInstance.ListenForArgumentsFromSuccessiveInstances();
SingleInstance.ArgumentsReceived.Subscribe(SingleInstance_ArgumentsReceived);
SingleInstance.ListenForArgumentsFromSuccessiveInstances();
// 清理上一次的日志文件,防止淤积占用磁盘空间
if (Directory.Exists("logging"))
@@ -82,8 +80,6 @@ namespace Netch
Logging.Info($"版本: {UpdateChecker.Owner}/{UpdateChecker.Repo}@{UpdateChecker.Version}");
Task.Run(() => { Logging.Info($"主程序 SHA256: {Utils.Utils.SHA256CheckSum(Global.NetchExecutable)}"); });
Global.LogStopwatch.Log("Get Info, Pre-Form");
// 绑定错误捕获
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
Application.ThreadException += Application_OnException;
@@ -107,7 +103,7 @@ namespace Netch
private static void SingleInstance_ArgumentsReceived(IEnumerable<string> args)
{
if (args.Contains(Global.ParameterShow))
if (args.Contains(Constants.ParameterShow))
{
Global.MainForm.ShowMainFormToolStripButton_Click(null!, null!);
}

View File

@@ -38,7 +38,7 @@ namespace Netch.Servers.Shadowsocks
};
if (mode.BypassChina)
command.acl = $"{Path.GetFullPath(File.Exists(Global.UserACL) ? Global.UserACL : Global.BuiltinACL)}";
command.acl = $"{Path.GetFullPath(File.Exists(Constants.UserACL) ? Constants.UserACL : Constants.BuiltinACL)}";
StartInstanceAuto(command.ToString());
}

View File

@@ -41,7 +41,7 @@ namespace Netch.Servers.ShadowsocksR
};
if (mode.BypassChina)
command.acl = $"{Path.GetFullPath(File.Exists(Global.UserACL) ? Global.UserACL : Global.BuiltinACL)}";
command.acl = $"{Path.GetFullPath(File.Exists(Constants.UserACL) ? Constants.UserACL : Constants.BuiltinACL)}";
StartInstanceAuto(command.ToString());
}

View File

@@ -73,7 +73,7 @@ namespace Netch.Servers.V2ray.Utils
break;
case 1:
case 2:
if (Global.Flags.SupportFakeDns && Global.Settings.TUNTAP.UseFakeDNS)
if (Flags.SupportFakeDns && Global.Settings.TUNTAP.UseFakeDNS)
directRuleObject.domain.Add("geosite:cn");
else
directRuleObject.ip.Add("geoip:cn");

View File

@@ -120,7 +120,7 @@ namespace Netch.Updater
// save, release mutex, then exit
Configuration.Save();
Global.MainForm.Invoke(new Action(() => { Global.SingleInstance.Dispose(); }));
Global.MainForm.Invoke(new Action(() => { Netch.SingleInstance.Dispose(); }));
Process.Start(Global.NetchExecutable);
Global.MainForm.Exit(true, false);
}

View File

@@ -45,7 +45,7 @@ namespace Netch.Utils
/// </summary>
public static void NetTraffic()
{
if (!Global.Flags.IsWindows10Upper)
if (!Flags.IsWindows10Upper)
return;
var counterLock = new object();

View File

@@ -39,7 +39,7 @@ namespace Netch.Utils
private static void Write(string text, LogLevel logLevel)
{
var contents = $@"[{DateTime.Now}][{logLevel.ToString()}] {text}{Global.EOF}";
var contents = $@"[{DateTime.Now}][{logLevel.ToString()}] {text}{Constants.EOF}";
#if DEBUG
switch (logLevel)
{