From e2c836794be9dda9928f040502e06ca0666e7b6e Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Thu, 8 Feb 2024 14:01:33 +0800 Subject: [PATCH] Refactor --- v2rayN/v2rayN/App.xaml.cs | 6 ++--- v2rayN/v2rayN/Common/Utils.cs | 22 +++++++++++++++++++ v2rayN/v2rayN/Global.cs | 10 +-------- v2rayN/v2rayN/Handler/CoreConfigSingbox.cs | 2 +- v2rayN/v2rayN/Handler/CoreConfigV2ray.cs | 2 +- v2rayN/v2rayN/Handler/CoreHandler.cs | 2 +- v2rayN/v2rayN/Handler/LazyConfig.cs | 17 +++++++++++++- v2rayN/v2rayN/Handler/StatisticsHandler.cs | 21 +++++++++--------- v2rayN/v2rayN/Handler/StatisticsSingbox.cs | 2 +- v2rayN/v2rayN/Handler/StatisticsV2ray.cs | 2 +- .../v2rayN/ViewModels/MainWindowViewModel.cs | 11 +++++----- 11 files changed, 63 insertions(+), 34 deletions(-) diff --git a/v2rayN/v2rayN/App.xaml.cs b/v2rayN/v2rayN/App.xaml.cs index 70147738..78199e70 100644 --- a/v2rayN/v2rayN/App.xaml.cs +++ b/v2rayN/v2rayN/App.xaml.cs @@ -27,10 +27,10 @@ namespace v2rayN /// protected override void OnStartup(StartupEventArgs e) { - Global.ExePathKey = Utils.GetMD5(Utils.GetExePath()); + var exePathKey = Utils.GetMD5(Utils.GetExePath()); var rebootas = (e.Args ?? new string[] { }).Any(t => t == Global.RebootAs); - ProgramStarted = new EventWaitHandle(false, EventResetMode.AutoReset, Global.ExePathKey, out bool bCreatedNew); + ProgramStarted = new EventWaitHandle(false, EventResetMode.AutoReset, exePathKey, out bool bCreatedNew); if (!rebootas && !bCreatedNew) { ProgramStarted.Set(); @@ -39,8 +39,6 @@ namespace v2rayN return; } - Global.ProcessJob = new Job(); - Logging.Setup(); Init(); Logging.LoggingEnabled(_config.guiItem.enableLog); diff --git a/v2rayN/v2rayN/Common/Utils.cs b/v2rayN/v2rayN/Common/Utils.cs index c0df6c8d..a56e814e 100644 --- a/v2rayN/v2rayN/Common/Utils.cs +++ b/v2rayN/v2rayN/Common/Utils.cs @@ -576,6 +576,28 @@ namespace v2rayN return inUse; } + public static int GetFreePort() + { + try + { + int defaultPort = 9090; + if (!Utils.PortInUse(defaultPort)) + { + return defaultPort; + } + + TcpListener l = new(IPAddress.Loopback, 0); + l.Start(); + int port = ((IPEndPoint)l.LocalEndpoint).Port; + l.Stop(); + return port; + } + catch + { + } + return 69090; + } + #endregion 测速 #region 杂项 diff --git a/v2rayN/v2rayN/Global.cs b/v2rayN/v2rayN/Global.cs index bf449a45..5e299609 100644 --- a/v2rayN/v2rayN/Global.cs +++ b/v2rayN/v2rayN/Global.cs @@ -118,6 +118,7 @@ namespace v2rayN @"http://cachefly.cachefly.net/100mb.test", @"http://cachefly.cachefly.net/10mb.test" }; + public static readonly List SpeedPingTestUrls = new() { @"https://www.google.com/generate_204", }; @@ -187,14 +188,5 @@ namespace v2rayN public static readonly List TuicCongestionControls = new() { "cubic", "new_reno", "bbr" }; #endregion const - - #region global variable - - public static int StatePort { get; set; } - public static Job ProcessJob { get; set; } - public static bool ShowInTaskbar { get; set; } - public static string ExePathKey { get; set; } - - #endregion global variable } } \ No newline at end of file diff --git a/v2rayN/v2rayN/Handler/CoreConfigSingbox.cs b/v2rayN/v2rayN/Handler/CoreConfigSingbox.cs index 0f75131f..a1505e2e 100644 --- a/v2rayN/v2rayN/Handler/CoreConfigSingbox.cs +++ b/v2rayN/v2rayN/Handler/CoreConfigSingbox.cs @@ -811,7 +811,7 @@ namespace v2rayN.Handler //}, clash_api = new Clash_Api4Sbox() { - external_controller = $"{Global.Loopback}:{Global.StatePort}", + external_controller = $"{Global.Loopback}:{LazyConfig.Instance.StatePort}", } }; } diff --git a/v2rayN/v2rayN/Handler/CoreConfigV2ray.cs b/v2rayN/v2rayN/Handler/CoreConfigV2ray.cs index 1538d8ce..8a650a73 100644 --- a/v2rayN/v2rayN/Handler/CoreConfigV2ray.cs +++ b/v2rayN/v2rayN/Handler/CoreConfigV2ray.cs @@ -788,7 +788,7 @@ namespace v2rayN.Handler Inboundsettings4Ray apiInboundSettings = new(); apiInbound.tag = tag; apiInbound.listen = Global.Loopback; - apiInbound.port = Global.StatePort; + apiInbound.port = LazyConfig.Instance.StatePort; apiInbound.protocol = Global.InboundAPIProtocal; apiInboundSettings.address = Global.Loopback; apiInbound.settings = apiInboundSettings; diff --git a/v2rayN/v2rayN/Handler/CoreHandler.cs b/v2rayN/v2rayN/Handler/CoreHandler.cs index b7fa62b4..c78f05da 100644 --- a/v2rayN/v2rayN/Handler/CoreHandler.cs +++ b/v2rayN/v2rayN/Handler/CoreHandler.cs @@ -316,7 +316,7 @@ namespace v2rayN.Handler throw new Exception(displayLog ? proc.StandardError.ReadToEnd() : "启动进程失败并退出 (Failed to start the process and exited)"); } - Global.ProcessJob.AddProcess(proc.Handle); + LazyConfig.Instance.AddProcess(proc.Handle); return proc; } catch (Exception ex) diff --git a/v2rayN/v2rayN/Handler/LazyConfig.cs b/v2rayN/v2rayN/Handler/LazyConfig.cs index 26d68863..51231eba 100644 --- a/v2rayN/v2rayN/Handler/LazyConfig.cs +++ b/v2rayN/v2rayN/Handler/LazyConfig.cs @@ -11,8 +11,14 @@ namespace v2rayN.Handler public static LazyConfig Instance => _instance.Value; + private int _statePort; + public int StatePort { get => _statePort; } + private Job _processJob = new(); + public LazyConfig() { + _statePort = Utils.GetFreePort(); + SqliteHelper.Instance.CreateTable(); SqliteHelper.Instance.CreateTable(); SqliteHelper.Instance.CreateTable(); @@ -62,6 +68,15 @@ namespace v2rayN.Handler } return localPort; } + + public void AddProcess(IntPtr processHandle) + { + _processJob.AddProcess(processHandle); + } + + #endregion Config + + #region SqliteHelper public List SubItems() { @@ -158,7 +173,7 @@ namespace v2rayN.Handler return SqliteHelper.Instance.Table().FirstOrDefault(it => it.coreType == eCoreType); } - #endregion Config + #endregion SqliteHelper #region Core Type diff --git a/v2rayN/v2rayN/Handler/StatisticsHandler.cs b/v2rayN/v2rayN/Handler/StatisticsHandler.cs index dd4d9d66..27071f01 100644 --- a/v2rayN/v2rayN/Handler/StatisticsHandler.cs +++ b/v2rayN/v2rayN/Handler/StatisticsHandler.cs @@ -28,7 +28,6 @@ namespace v2rayN.Handler _updateFunc = update; Init(); - Global.StatePort = GetFreePort(); _statisticsV2Ray = new StatisticsV2ray(config, UpdateServerStat); _statisticsSingbox = new StatisticsSingbox(config, UpdateServerStat); @@ -80,6 +79,10 @@ namespace v2rayN.Handler { GetServerStatItem(_config.indexId); + if (_serverStatItem is null) + { + return; + } if (server.proxyUp != 0 || server.proxyDown != 0) { _serverStatItem.todayUp += server.proxyUp; @@ -87,15 +90,13 @@ namespace v2rayN.Handler _serverStatItem.totalUp += server.proxyUp; _serverStatItem.totalDown += server.proxyDown; } - if (Global.ShowInTaskbar) - { - server.indexId = _config.indexId; - server.todayUp = _serverStatItem.todayUp; - server.todayDown = _serverStatItem.todayDown; - server.totalUp = _serverStatItem.totalUp; - server.totalDown = _serverStatItem.totalDown; - _updateFunc(server); - } + + server.indexId = _config.indexId; + server.todayUp = _serverStatItem.todayUp; + server.todayDown = _serverStatItem.todayDown; + server.totalUp = _serverStatItem.totalUp; + server.totalDown = _serverStatItem.totalDown; + _updateFunc(server); } private void GetServerStatItem(string indexId) diff --git a/v2rayN/v2rayN/Handler/StatisticsSingbox.cs b/v2rayN/v2rayN/Handler/StatisticsSingbox.cs index 7db85996..fc559e54 100644 --- a/v2rayN/v2rayN/Handler/StatisticsSingbox.cs +++ b/v2rayN/v2rayN/Handler/StatisticsSingbox.cs @@ -27,7 +27,7 @@ namespace v2rayN.Handler try { - url = $"ws://{Global.Loopback}:{Global.StatePort}/traffic"; + url = $"ws://{Global.Loopback}:{LazyConfig.Instance.StatePort}/traffic"; if (webSocket == null) { diff --git a/v2rayN/v2rayN/Handler/StatisticsV2ray.cs b/v2rayN/v2rayN/Handler/StatisticsV2ray.cs index 63cdac41..128895fc 100644 --- a/v2rayN/v2rayN/Handler/StatisticsV2ray.cs +++ b/v2rayN/v2rayN/Handler/StatisticsV2ray.cs @@ -30,7 +30,7 @@ namespace v2rayN.Handler { try { - _channel = GrpcChannel.ForAddress($"{Global.HttpProtocol}{Global.Loopback}:{Global.StatePort}"); + _channel = GrpcChannel.ForAddress($"{Global.HttpProtocol}{Global.Loopback}:{LazyConfig.Instance.StatePort}"); _client = new StatsService.StatsServiceClient(_channel); } catch (Exception ex) diff --git a/v2rayN/v2rayN/ViewModels/MainWindowViewModel.cs b/v2rayN/v2rayN/ViewModels/MainWindowViewModel.cs index a8478e1b..2168b316 100644 --- a/v2rayN/v2rayN/ViewModels/MainWindowViewModel.cs +++ b/v2rayN/v2rayN/ViewModels/MainWindowViewModel.cs @@ -35,6 +35,7 @@ namespace v2rayN.ViewModels private readonly PaletteHelper _paletteHelper = new(); private Dictionary _dicHeaderSort = new(); private Action _updateView; + private bool _showInTaskbar; #endregion private prop @@ -568,7 +569,7 @@ namespace v2rayN.ViewModels AutoHideStartup(); - Global.ShowInTaskbar = true; + _showInTaskbar = true; } private void Init() @@ -635,7 +636,7 @@ namespace v2rayN.ViewModels { Application.Current.Dispatcher.Invoke((Action)(() => { - if (!Global.ShowInTaskbar) + if (!_showInTaskbar) { return; } @@ -1183,7 +1184,7 @@ namespace v2rayN.ViewModels _noticeHandler?.SendMessage(msg, true); Application.Current.Dispatcher.Invoke((Action)(() => { - if (!Global.ShowInTaskbar) + if (!_showInTaskbar) { return; } @@ -1658,7 +1659,7 @@ namespace v2rayN.ViewModels public void ShowHideWindow(bool? blShow) { - var bl = blShow ?? !Global.ShowInTaskbar; + var bl = blShow ?? !_showInTaskbar; if (bl) { //Application.Current.MainWindow.ShowInTaskbar = true; @@ -1677,7 +1678,7 @@ namespace v2rayN.ViewModels //IntPtr windowHandle = new WindowInteropHelper(Application.Current.MainWindow).Handle; //Utils.RegWriteValue(Global.MyRegPath, Utils.WindowHwndKey, Convert.ToString((long)windowHandle)); } - Global.ShowInTaskbar = bl; + _showInTaskbar = bl; } private void RestoreUI()