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()