PacHandler is changed to singleton mode

This commit is contained in:
2dust 2025-08-17 11:00:13 +08:00
parent 6979e21628
commit 06636d04ac
4 changed files with 19 additions and 22 deletions

View file

@ -5,15 +5,18 @@ namespace ServiceLib.Handler;
public class PacHandler
{
private static string _configPath;
private static int _httpPort;
private static int _pacPort;
private static TcpListener? _tcpListener;
private static byte[] _writeContent;
private static bool _isRunning;
private static bool _needRestart = true;
private static readonly Lazy<PacHandler> _instance = new(() => new PacHandler());
public static PacHandler Instance => _instance.Value;
public static async Task Start(string configPath, int httpPort, int pacPort)
private string _configPath;
private int _httpPort;
private int _pacPort;
private TcpListener? _tcpListener;
private byte[] _writeContent;
private bool _isRunning;
private bool _needRestart = true;
public async Task StartAsync(string configPath, int httpPort, int pacPort)
{
_needRestart = configPath != _configPath || httpPort != _httpPort || pacPort != _pacPort || !_isRunning;
@ -30,7 +33,7 @@ public class PacHandler
}
}
private static async Task InitText()
private async Task InitText()
{
var path = Path.Combine(_configPath, "pac.txt");
@ -59,7 +62,7 @@ public class PacHandler
_writeContent = Encoding.UTF8.GetBytes(sb.ToString());
}
private static void RunListener()
private void RunListener()
{
_tcpListener = TcpListener.Create(_pacPort);
_isRunning = true;
@ -87,14 +90,14 @@ public class PacHandler
}, TaskCreationOptions.LongRunning);
}
private static void WriteContent(TcpClient client)
private void WriteContent(TcpClient client)
{
var stream = client.GetStream();
stream.Write(_writeContent, 0, _writeContent.Length);
stream.Flush();
}
public static void Stop()
public void Stop()
{
if (_tcpListener == null)
{

View file

@ -56,7 +56,7 @@ public static class SysProxyHandler
if (type != ESysProxyType.Pac && Utils.IsWindows())
{
PacHandler.Stop();
PacHandler.Instance.Stop();
}
}
catch (Exception ex)
@ -91,7 +91,7 @@ public static class SysProxyHandler
private static async Task SetWindowsProxyPac(int port)
{
var portPac = AppHandler.Instance.GetLocalPort(EInboundProtocol.pac);
await PacHandler.Start(Utils.GetConfigPath(), port, portPac);
await PacHandler.Instance.StartAsync(Utils.GetConfigPath(), port, portPac);
var strProxy = $"{Global.HttpProtocol}{Global.Loopback}:{portPac}/pac?t={DateTime.Now.Ticks}";
ProxySettingWindows.SetProxy(strProxy, "", 4);
}

View file

@ -75,10 +75,7 @@ public class CheckUpdateViewModel : MyReactiveObject
private async Task CheckUpdate()
{
await Task.Run(async () =>
{
await CheckUpdateTask();
});
await Task.Run(CheckUpdateTask);
}
private async Task CheckUpdateTask()

View file

@ -334,10 +334,7 @@ public class StatusBarViewModel : MyReactiveObject
_updateView?.Invoke(EViewAction.DispatcherServerAvailability, ResUI.Speedtesting);
var msg = await Task.Run(async () =>
{
return await ConnectionHandler.Instance.RunAvailabilityCheck();
});
var msg = await Task.Run(ConnectionHandler.Instance.RunAvailabilityCheck);
NoticeHandler.Instance.SendMessageEx(msg);
_updateView?.Invoke(EViewAction.DispatcherServerAvailability, msg);