From 951cee1c06057af4c15ae421f21c23acf7e1ea12 Mon Sep 17 00:00:00 2001 From: ChsBuffer <33744752+chsbuffer@users.noreply.github.com> Date: Tue, 8 Jun 2021 17:12:56 +0800 Subject: [PATCH] Update TUNController _serverAddress Update ModeHelper FilesystemWatcher OnNext --- Netch/Controllers/TUNController.cs | 15 +++++++++------ Netch/Utils/ModeHelper.cs | 4 ++-- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/Netch/Controllers/TUNController.cs b/Netch/Controllers/TUNController.cs index bcaa176a..eede3230 100644 --- a/Netch/Controllers/TUNController.cs +++ b/Netch/Controllers/TUNController.cs @@ -26,7 +26,7 @@ namespace Netch.Controllers private NetRoute _tun; - private IPAddress _serverAddresses = null!; + private IPAddress? _serverRemoteAddress; private Mode _mode = null!; @@ -34,7 +34,10 @@ namespace Netch.Controllers { _mode = mode; var server = MainController.Server!; - _serverAddresses = DnsUtils.Lookup(server.Hostname)!; // server address have been cached when MainController.Start + _serverRemoteAddress = DnsUtils.Lookup(server.Hostname); + + if (_serverRemoteAddress != null && IPAddress.IsLoopback(_serverRemoteAddress)) + _serverRemoteAddress = null; _outbound = NetRoute.GetBestRouteTemplate(out var address); CheckDriver(); @@ -112,8 +115,8 @@ namespace Netch.Controllers Log.Information("设置路由规则"); // Server Address - if (!IPAddress.IsLoopback(_serverAddresses)) - RouteUtils.CreateRoute(_outbound.FillTemplate(_serverAddresses.ToString(), 32)); + if (_serverRemoteAddress != null) + RouteUtils.CreateRoute(_outbound.FillTemplate(_serverRemoteAddress.ToString(), 32)); // Global Bypass IPs RouteUtils.CreateRouteFill(_outbound, Global.Settings.TUNTAP.BypassIPs); @@ -154,8 +157,8 @@ namespace Netch.Controllers private void ClearRouteTable() { - if (!IPAddress.IsLoopback(_serverAddresses)) - RouteUtils.DeleteRoute(_outbound.FillTemplate(_serverAddresses.ToString(), 32)); + if (_serverRemoteAddress != null) + RouteUtils.DeleteRoute(_outbound.FillTemplate(_serverRemoteAddress.ToString(), 32)); RouteUtils.DeleteRouteFill(_outbound, Global.Settings.TUNTAP.BypassIPs); diff --git a/Netch/Utils/ModeHelper.cs b/Netch/Utils/ModeHelper.cs index 98a471a2..7041edd3 100644 --- a/Netch/Utils/ModeHelper.cs +++ b/Netch/Utils/ModeHelper.cs @@ -52,10 +52,10 @@ namespace Netch.Utils .Select(x => x.EventArgs); var o = Observable.Merge(created, deleted, renamed, changed); - o.Throttle(TimeSpan.FromSeconds(3)).Select(_ => true).Subscribe(OnNext, exception => Log.Error(exception, "FileSystemWatcherError")); + o.Throttle(TimeSpan.FromSeconds(3)).Subscribe(_ => OnModeChange(), exception => Log.Error(exception, "FileSystemWatcherError")); } - private static void OnNext(bool obj) + private static void OnModeChange() { Load(); Global.MainForm.LoadModes();