diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index cebc3d27..d701f7ae 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -33,11 +33,11 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.ACTIONS_TOKEN }} with: - tag_name: v1.4.9 - release_name: v1.4.9.${{ steps.date.outputs.today }} + tag_name: v1.5.0 + release_name: v1.5.0.${{ steps.date.outputs.today }} draft: false prerelease: false - body: "1. 新增多分组管理,方便分组切换\r\n2. 增加分组密码,提高分组隔离安全性\r\n3. 优化配置同步,可自由选择同步哪些信息\r\n4. 自动分配虚拟网卡IP\r\n5. 线程池优化\r\n6. 一些UI优化" + body: "1. 新增多分组管理,方便分组切换\r\n2. 增加分组密码,提高分组隔离安全性\r\n3. 优化配置同步,可自由选择同步哪些信息\r\n4. 自动分配虚拟网卡IP\r\n5. 线程池优化\r\n6. 一些UI优化\r\n7. 测试中,不要更新,不要更新,不要更新,请使用v1.4.9" - name: upload-win-x86-oss id: upload-win-x86-oss uses: tvrcgo/oss-action@v0.1.1 @@ -47,7 +47,7 @@ jobs: key-secret: ${{ secrets.ALIYUN_OSS_SECRET }} bucket: ide-qbcode asset-path: ./public/publish-zip/linker-win-x86.zip - target-path: /downloads/linker/v1.4.9/linker-win-x86.zip + target-path: /downloads/linker/v1.5.0/linker-win-x86.zip - name: upload-win-x86 id: upload-win-x86 uses: actions/upload-release-asset@master @@ -67,7 +67,7 @@ jobs: key-secret: ${{ secrets.ALIYUN_OSS_SECRET }} bucket: ide-qbcode asset-path: ./public/publish-zip/linker-win-x64.zip - target-path: /downloads/linker/v1.4.9/linker-win-x64.zip + target-path: /downloads/linker/v1.5.0/linker-win-x64.zip - name: upload-win-x64 id: upload-win-x64 uses: actions/upload-release-asset@master @@ -87,7 +87,7 @@ jobs: key-secret: ${{ secrets.ALIYUN_OSS_SECRET }} bucket: ide-qbcode asset-path: ./public/publish-zip/linker-win-arm64.zip - target-path: /downloads/linker/v1.4.9/linker-win-arm64.zip + target-path: /downloads/linker/v1.5.0/linker-win-arm64.zip - name: upload-win-arm64 id: upload-win-arm64 uses: actions/upload-release-asset@master @@ -107,7 +107,7 @@ jobs: key-secret: ${{ secrets.ALIYUN_OSS_SECRET }} bucket: ide-qbcode asset-path: ./public/publish-zip/linker-linux-x64.zip - target-path: /downloads/linker/v1.4.9/linker-linux-x64.zip + target-path: /downloads/linker/v1.5.0/linker-linux-x64.zip - name: upload-linux-x64 id: upload-linux-x64 uses: actions/upload-release-asset@master @@ -127,7 +127,7 @@ jobs: key-secret: ${{ secrets.ALIYUN_OSS_SECRET }} bucket: ide-qbcode asset-path: ./public/publish-zip/linker-linux-arm.zip - target-path: /downloads/linker/v1.4.9/linker-linux-arm.zip + target-path: /downloads/linker/v1.5.0/linker-linux-arm.zip - name: upload-linux-arm id: upload-linux-arm uses: actions/upload-release-asset@master @@ -147,7 +147,7 @@ jobs: key-secret: ${{ secrets.ALIYUN_OSS_SECRET }} bucket: ide-qbcode asset-path: ./public/publish-zip/linker-linux-arm64.zip - target-path: /downloads/linker/v1.4.9/linker-linux-arm64.zip + target-path: /downloads/linker/v1.5.0/linker-linux-arm64.zip - name: upload-linux-arm64 id: upload-linux-arm64 uses: actions/upload-release-asset@master @@ -167,7 +167,7 @@ jobs: key-secret: ${{ secrets.ALIYUN_OSS_SECRET }} bucket: ide-qbcode asset-path: ./public/publish-zip/linker-linux-musl-x64.zip - target-path: /downloads/linker/v1.4.9/linker-linux-musl-x64.zip + target-path: /downloads/linker/v1.5.0/linker-linux-musl-x64.zip - name: upload-linux-musl-x64 id: upload-linux-musl-x64 uses: actions/upload-release-asset@master @@ -187,7 +187,7 @@ jobs: key-secret: ${{ secrets.ALIYUN_OSS_SECRET }} bucket: ide-qbcode asset-path: ./public/publish-zip/linker-linux-musl-arm.zip - target-path: /downloads/linker/v1.4.9/linker-linux-musl-arm.zip + target-path: /downloads/linker/v1.5.0/linker-linux-musl-arm.zip - name: upload-linux-musl-arm id: upload-linux-musl-arm uses: actions/upload-release-asset@master @@ -207,7 +207,7 @@ jobs: key-secret: ${{ secrets.ALIYUN_OSS_SECRET }} bucket: ide-qbcode asset-path: ./public/publish-zip/linker-linux-musl-arm64.zip - target-path: /downloads/linker/v1.4.9/linker-linux-musl-arm64.zip + target-path: /downloads/linker/v1.5.0/linker-linux-musl-arm64.zip - name: upload-linux-musl-arm64 id: upload-linux-musl-arm64 uses: actions/upload-release-asset@master @@ -227,7 +227,7 @@ jobs: key-secret: ${{ secrets.ALIYUN_OSS_SECRET }} bucket: ide-qbcode asset-path: ./public/publish-zip/linker-osx-x64.zip - target-path: /downloads/linker/v1.4.9/linker-osx-x64.zip + target-path: /downloads/linker/v1.5.0/linker-osx-x64.zip - name: upload-osx-x64 id: upload-osx-x64 uses: actions/upload-release-asset@master @@ -247,7 +247,7 @@ jobs: key-secret: ${{ secrets.ALIYUN_OSS_SECRET }} bucket: ide-qbcode asset-path: ./public/publish-zip/linker-osx-arm64.zip - target-path: /downloads/linker/v1.4.9/linker-osx-arm64.zip + target-path: /downloads/linker/v1.5.0/linker-osx-arm64.zip - name: upload-osx-arm64 id: upload-osx-arm64 uses: actions/upload-release-asset@master @@ -277,7 +277,7 @@ jobs: key-secret: ${{ secrets.ALIYUN_OSS_SECRET }} bucket: ide-qbcode asset-path: ./public/publish-zip/linker-windows-route.zip - target-path: /downloads/linker/v1.4.9/linker-windows-route.zip + target-path: /downloads/linker/v1.5.0/linker-windows-route.zip - name: upload-windows-route id: upload-windows-route uses: actions/upload-release-asset@master diff --git a/.github/workflows/nuget.yml b/.github/workflows/nuget.yml index 56d28405..345af1d8 100644 --- a/.github/workflows/nuget.yml +++ b/.github/workflows/nuget.yml @@ -38,6 +38,6 @@ jobs: - name: Push run: | - nuget push ./linker.tunnel/bin/release/linker.tunnel.1.4.9.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol - nuget push ./linker.libs/bin/release/linker.libs.1.4.9.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol - nuget push ./linker.tun/bin/release/linker.tun.1.4.9.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol + nuget push ./linker.tunnel/bin/release/linker.tunnel.1.5.0.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol + nuget push ./linker.libs/bin/release/linker.libs.1.5.0.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol + nuget push ./linker.tun/bin/release/linker.tun.1.5.0.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol diff --git a/linker.libs/TimerHelper.cs b/linker.libs/TimerHelper.cs index ac4ee5d4..baa1bef6 100644 --- a/linker.libs/TimerHelper.cs +++ b/linker.libs/TimerHelper.cs @@ -27,7 +27,21 @@ namespace linker.libs } }); } - public static void SetInterval(Func> action, int delayMs) + public static void SetInterval(Func action, Func delay) + { + Task.Run(async () => + { + while (true) + { + if (action() == false) + { + break; + } + await Task.Delay(delay()).ConfigureAwait(false); + } + }); + } + public static void SetInterval(Func> action, Func delay) { Task.Run(async () => { @@ -37,7 +51,7 @@ namespace linker.libs { break; } - await Task.Delay(delayMs).ConfigureAwait(false); + await Task.Delay(delay()).ConfigureAwait(false); } }); } diff --git a/linker.libs/extends/NumberExtends.cs b/linker.libs/extends/NumberExtends.cs index 3b58b156..dd491d91 100644 --- a/linker.libs/extends/NumberExtends.cs +++ b/linker.libs/extends/NumberExtends.cs @@ -17,7 +17,7 @@ namespace linker.libs.extends ref double v = ref value; fixed (void* p = &v) { - new Span(p, 8).CopyTo(memory.Span); + new Span(p, sizeof(double)).CopyTo(memory.Span); } } #endregion @@ -32,7 +32,7 @@ namespace linker.libs.extends ref long v = ref value; fixed (void* p = &v) { - new Span(p, 8).CopyTo(memory.Span); + new Span(p, sizeof(long)).CopyTo(memory.Span); } } public static unsafe void ToBytes(this long[] value, Memory memory) @@ -80,7 +80,7 @@ namespace linker.libs.extends ref int v = ref value; fixed (void* p = &v) { - new Span(p, 4).CopyTo(memory.Span); + new Span(p, sizeof(int)).CopyTo(memory.Span); } } public static unsafe void ToBytes(this int[] value, Memory memory) @@ -99,7 +99,7 @@ namespace linker.libs.extends ref uint v = ref value; fixed (void* p = &v) { - new Span(p, 4).CopyTo(memory.Span); + new Span(p, sizeof(uint)).CopyTo(memory.Span); } } public static unsafe void ToBytes(this uint[] value, Memory memory) diff --git a/linker.libs/linker.libs.csproj b/linker.libs/linker.libs.csproj index ea1e4814..736580a1 100644 --- a/linker.libs/linker.libs.csproj +++ b/linker.libs/linker.libs.csproj @@ -14,9 +14,9 @@ snltty https://github.com/snltty/linker https://github.com/snltty/linker - 1.4.9 - 1.4.9 - 1.4.9 + 1.5.0 + 1.5.0 + 1.5.0 full diff --git a/linker.tun/linker.tun.csproj b/linker.tun/linker.tun.csproj index aaea318c..9da1da63 100644 --- a/linker.tun/linker.tun.csproj +++ b/linker.tun/linker.tun.csproj @@ -16,9 +16,9 @@ https://github.com/snltty/linker https://github.com/snltty/linker linker tun - 1.4.9 - 1.4.9 - 1.4.9 + 1.5.0 + 1.5.0 + 1.5.0 diff --git a/linker.tunnel/TunnelTransfer.cs b/linker.tunnel/TunnelTransfer.cs index 579acbec..4b251d4b 100644 --- a/linker.tunnel/TunnelTransfer.cs +++ b/linker.tunnel/TunnelTransfer.cs @@ -28,7 +28,7 @@ namespace linker.tunnel /// 加载打洞协议 /// /// - public void Init(TunnelWanPortTransfer compactTransfer, ITunnelAdapter tunnelAdapter, List transports) + public void LoadTransports(TunnelWanPortTransfer compactTransfer, ITunnelAdapter tunnelAdapter, List transports) { this.compactTransfer = compactTransfer; this.tunnelAdapter = tunnelAdapter; diff --git a/linker.tunnel/connection/TunnelConnectionTcp.cs b/linker.tunnel/connection/TunnelConnectionTcp.cs index 7662d00d..0bd9ed9d 100644 --- a/linker.tunnel/connection/TunnelConnectionTcp.cs +++ b/linker.tunnel/connection/TunnelConnectionTcp.cs @@ -305,7 +305,7 @@ namespace linker.tunnel.connection public override string ToString() { - return this.ToJson(); + return this.ToJsonFormat(); } public bool Equals(ITunnelConnection connection) { diff --git a/linker.tunnel/linker.tunnel.csproj b/linker.tunnel/linker.tunnel.csproj index 3a1d0ea7..cd8da9b9 100644 --- a/linker.tunnel/linker.tunnel.csproj +++ b/linker.tunnel/linker.tunnel.csproj @@ -16,9 +16,9 @@ https://github.com/snltty/linker https://github.com/snltty/linker linker tunnel - 1.4.9 - 1.4.9 - 1.4.9 + 1.5.0 + 1.5.0 + 1.5.0 diff --git a/linker.tunnel/wanport/TunnelWanPortTransfer.cs b/linker.tunnel/wanport/TunnelWanPortTransfer.cs index f427939e..81233a0c 100644 --- a/linker.tunnel/wanport/TunnelWanPortTransfer.cs +++ b/linker.tunnel/wanport/TunnelWanPortTransfer.cs @@ -19,7 +19,7 @@ namespace linker.tunnel.wanport /// 加载所有外网端口协议 /// /// - public void Init(List tunnelWanPorts) + public void LoadTransports(List tunnelWanPorts) { this.tunnelWanPorts = tunnelWanPorts; LoggerHelper.Instance.Info($"load tunnel wanport compacts:{string.Join(",", tunnelWanPorts.Select(c => c.Name))}"); diff --git a/linker/linker.csproj b/linker/linker.csproj index acf1a591..c58bdbbb 100644 --- a/linker/linker.csproj +++ b/linker/linker.csproj @@ -26,14 +26,15 @@ 3. 优化配置同步,可自由选择同步哪些信息 4. 自动分配虚拟网卡IP 5. 线程池优化 -6. 一些UI优化 +6. 一些UI优化 +7. 测试中,不要更新,不要更新,不要更新,请使用v1.4.9 snltty https://github.com/snltty/linker https://github.com/snltty/linker linker - 1.4.9 - 1.4.9 - 1.4.9 + 1.5.0 + 1.5.0 + 1.5.0 diff --git a/linker/plugins/client/ClientSignInTransfer.cs b/linker/plugins/client/ClientSignInTransfer.cs index 6c311430..050fe6c3 100644 --- a/linker/plugins/client/ClientSignInTransfer.cs +++ b/linker/plugins/client/ClientSignInTransfer.cs @@ -54,7 +54,7 @@ namespace linker.plugins.client } } return true; - }, 10000); + }, () => 10000); } /// @@ -221,7 +221,7 @@ namespace linker.plugins.client public void Set(string newName, ClientGroupInfo[] groups) { config.Data.Client.Name = newName; - config.Data.Client.Groups = groups.DistinctBy(c => c.Name).ToArray(); + config.Data.Client.Groups = groups.DistinctBy(c => c.Name).ToArray(); config.Data.Update(); } /// @@ -230,7 +230,7 @@ namespace linker.plugins.client /// public void Set(ClientGroupInfo[] groups) { - config.Data.Client.Groups = groups.DistinctBy(c=>c.Name).ToArray(); + config.Data.Client.Groups = groups.DistinctBy(c => c.Name).ToArray(); config.Data.Update(); } diff --git a/linker/plugins/forward/proxy/ForwardProxyUdp.cs b/linker/plugins/forward/proxy/ForwardProxyUdp.cs index 3d600fd6..abf07aa1 100644 --- a/linker/plugins/forward/proxy/ForwardProxyUdp.cs +++ b/linker/plugins/forward/proxy/ForwardProxyUdp.cs @@ -291,7 +291,7 @@ namespace linker.plugins.forward.proxy } return true; - }, 5000); + }, 30000); } private void CloseClientSocketUdp(ITunnelConnection connection) diff --git a/linker/plugins/relay/RelayFlow.cs b/linker/plugins/relay/RelayFlow.cs index 79f0727c..6dcf418f 100644 --- a/linker/plugins/relay/RelayFlow.cs +++ b/linker/plugins/relay/RelayFlow.cs @@ -31,7 +31,7 @@ namespace linker.plugins.relay } } return true; - }, 1000); + }, () => lastTicksManager.DiffLessEqual(5000) ? 1000 : 30000); } public void Update() diff --git a/linker/plugins/relay/RelayTransfer.cs b/linker/plugins/relay/RelayTransfer.cs index 1bf74341..7ad58480 100644 --- a/linker/plugins/relay/RelayTransfer.cs +++ b/linker/plugins/relay/RelayTransfer.cs @@ -293,7 +293,7 @@ namespace linker.plugins.relay await TaskRelay(); } return true; - }, 3000); + }, () => lastTicksManager.DiffLessEqual(3000) ? 3000 : 30000); } sealed class TestInfo { diff --git a/linker/plugins/relay/transport/TransportSelfHost.cs b/linker/plugins/relay/transport/TransportSelfHost.cs index c67ec378..906e157e 100644 --- a/linker/plugins/relay/transport/TransportSelfHost.cs +++ b/linker/plugins/relay/transport/TransportSelfHost.cs @@ -162,6 +162,7 @@ namespace linker.plugins.relay.transport { if (certificate == null) { + LoggerHelper.Instance.Error($"need ssl"); socket.SafeClose(); return null; } diff --git a/linker/plugins/sforward/proxy/SForwardFlow.cs b/linker/plugins/sforward/proxy/SForwardFlow.cs index 5dab0ef6..11b61870 100644 --- a/linker/plugins/sforward/proxy/SForwardFlow.cs +++ b/linker/plugins/sforward/proxy/SForwardFlow.cs @@ -31,7 +31,7 @@ namespace linker.plugins.sforward.proxy } } return true; - }, 1000); + }, () => lastTicksManager.DiffLessEqual(5000) ? 1000 : 30000); } diff --git a/linker/plugins/sforward/proxy/SForwardProxyUdp.cs b/linker/plugins/sforward/proxy/SForwardProxyUdp.cs index 358caca0..1963c9ef 100644 --- a/linker/plugins/sforward/proxy/SForwardProxyUdp.cs +++ b/linker/plugins/sforward/proxy/SForwardProxyUdp.cs @@ -284,7 +284,7 @@ namespace linker.plugins.sforward.proxy } } return true; - }, 5000); + }, 60000); } } diff --git a/linker/plugins/tunnel/TunnelStartup.cs b/linker/plugins/tunnel/TunnelStartup.cs index 90fc0d76..1c769995 100644 --- a/linker/plugins/tunnel/TunnelStartup.cs +++ b/linker/plugins/tunnel/TunnelStartup.cs @@ -101,7 +101,7 @@ namespace linker.plugins.tunnel }; List compacts = types.Select(c => (ITunnelWanPortProtocol)serviceProvider.GetService(c)).Where(c => c != null).Where(c => string.IsNullOrWhiteSpace(c.Name) == false).ToList(); TunnelWanPortTransfer compack = serviceProvider.GetService(); - compack.Init(compacts); + compack.LoadTransports(compacts); types = new List { @@ -114,7 +114,7 @@ namespace linker.plugins.tunnel }; List transports = types.Select(c => (ITunnelTransport)serviceProvider.GetService(c)).Where(c => c != null).Where(c => string.IsNullOrWhiteSpace(c.Name) == false).ToList(); TunnelTransfer tunnel = serviceProvider.GetService(); - tunnel.Init(compack, tunnelAdapter, transports); + tunnel.LoadTransports(compack, tunnelAdapter, transports); TunnelConfigTransfer tunnelConfigTransfer = serviceProvider.GetService(); TunnelExcludeIPTransfer excludeIPTransfer = serviceProvider.GetService(); diff --git a/linker/plugins/tuntap/TuntapStartup.cs b/linker/plugins/tuntap/TuntapStartup.cs index a4b7d2e9..72bc4848 100644 --- a/linker/plugins/tuntap/TuntapStartup.cs +++ b/linker/plugins/tuntap/TuntapStartup.cs @@ -34,6 +34,10 @@ namespace linker.plugins.tuntap serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(); + + } public void AddServer(ServiceCollection serviceCollection, FileConfig config) @@ -51,6 +55,9 @@ namespace linker.plugins.tuntap LeaseClientTreansfer leaseTreansfer = serviceProvider.GetService(); TuntapConfigTransfer tuntapConfigTransfer = serviceProvider.GetService(); + TuntapPingTransfer tuntapPingTransfer = serviceProvider.GetService(); + TuntapDeviceStatusTransfer tuntapDeviceStatusTransfer = serviceProvider.GetService(); + } public void UseServer(ServiceProvider serviceProvider, FileConfig config) diff --git a/linker/plugins/tuntap/client/TuntapApiController.cs b/linker/plugins/tuntap/client/TuntapApiController.cs index a5267d56..4452166b 100644 --- a/linker/plugins/tuntap/client/TuntapApiController.cs +++ b/linker/plugins/tuntap/client/TuntapApiController.cs @@ -24,8 +24,10 @@ namespace linker.plugins.tuntap.client private readonly RunningConfig runningConfig; private readonly TuntapConfigTransfer tuntapConfigTransfer; private readonly LeaseClientTreansfer leaseClientTreansfer; + private readonly TuntapPingTransfer pingTransfer; - public TuntapClientApiController(MessengerSender messengerSender, TuntapTransfer tuntapTransfer, ClientSignInState clientSignInState, FileConfig config, TuntapProxy tuntapProxy, RunningConfig runningConfig, TuntapConfigTransfer tuntapConfigTransfer, LeaseClientTreansfer leaseClientTreansfer) + + public TuntapClientApiController(MessengerSender messengerSender, TuntapTransfer tuntapTransfer, ClientSignInState clientSignInState, FileConfig config, TuntapProxy tuntapProxy, RunningConfig runningConfig, TuntapConfigTransfer tuntapConfigTransfer, LeaseClientTreansfer leaseClientTreansfer, TuntapPingTransfer pingTransfer) { this.messengerSender = messengerSender; this.tuntapTransfer = tuntapTransfer; @@ -35,6 +37,7 @@ namespace linker.plugins.tuntap.client this.runningConfig = runningConfig; this.tuntapConfigTransfer = tuntapConfigTransfer; this.leaseClientTreansfer = leaseClientTreansfer; + this.pingTransfer = pingTransfer; } public ConnectionListInfo Connections(ApiControllerParamsInfo param) @@ -96,9 +99,7 @@ namespace linker.plugins.tuntap.client { if (config.Data.Client.HasAccess(ClientApiAccess.TuntapStatusSelf) == false) return false; - tuntapTransfer.Shutdown(); - await tuntapConfigTransfer.RefreshIPForce(); - tuntapTransfer.Setup(); + await tuntapConfigTransfer.RetstartDevice(); } else { @@ -124,7 +125,7 @@ namespace linker.plugins.tuntap.client if (param.Content == config.Data.Client.Id) { if (config.Data.Client.HasAccess(ClientApiAccess.TuntapStatusSelf) == false) return false; - tuntapTransfer.Shutdown(); + tuntapConfigTransfer.StopDevice(); } else { @@ -191,20 +192,23 @@ namespace linker.plugins.tuntap.client return await leaseClientTreansfer.GetNetwork(); } + /// + /// 订阅ping + /// + /// public void SubscribePing(ApiControllerParamsInfo param) { - tuntapConfigTransfer.SubscribePing(); - } - - public sealed class TuntabListInfo - { - public ConcurrentDictionary List { get; set; } - public ulong HashCode { get; set; } - } - public sealed class ConnectionListInfo - { - public ConcurrentDictionary List { get; set; } - public ulong HashCode { get; set; } + pingTransfer.SubscribePing(); } } + public sealed class TuntabListInfo + { + public ConcurrentDictionary List { get; set; } + public ulong HashCode { get; set; } + } + public sealed class ConnectionListInfo + { + public ConcurrentDictionary List { get; set; } + public ulong HashCode { get; set; } + } } diff --git a/linker/plugins/tuntap/client/TuntapConfigTransfer.cs b/linker/plugins/tuntap/client/TuntapConfigTransfer.cs index 4b912e91..28bff514 100644 --- a/linker/plugins/tuntap/client/TuntapConfigTransfer.cs +++ b/linker/plugins/tuntap/client/TuntapConfigTransfer.cs @@ -9,8 +9,6 @@ using linker.plugins.client; using linker.plugins.messenger; using linker.plugins.tuntap.config; using linker.tun; -using linker.tunnel.connection; -using System.Net.NetworkInformation; using linker.plugins.tuntap.lease; namespace linker.plugins.tuntap.client @@ -22,32 +20,25 @@ namespace linker.plugins.tuntap.client private readonly FileConfig config; private readonly TuntapProxy tuntapProxy; private readonly RunningConfig runningConfig; - private readonly LinkerTunDeviceAdapter linkerTunDeviceAdapter; private readonly TuntapTransfer tuntapTransfer; private readonly LeaseClientTreansfer leaseClientTreansfer; - private string deviceName = "linker"; - public VersionManager Version { get; } = new VersionManager(); private readonly ConcurrentDictionary tuntapInfos = new ConcurrentDictionary(); public ConcurrentDictionary Infos => tuntapInfos; - public LinkerTunDeviceRouteItem[] RouteItems { get; private set; } = []; - private readonly SemaphoreSlim slim = new SemaphoreSlim(1); - public TuntapConfigTransfer(MessengerSender messengerSender, ClientSignInState clientSignInState, FileConfig config, TuntapProxy tuntapProxy, RunningConfig runningConfig, LinkerTunDeviceAdapter linkerTunDeviceAdapter, TuntapTransfer tuntapTransfer, LeaseClientTreansfer leaseClientTreansfer) + public TuntapConfigTransfer(MessengerSender messengerSender, ClientSignInState clientSignInState, FileConfig config, TuntapProxy tuntapProxy, RunningConfig runningConfig, TuntapTransfer tuntapTransfer, LeaseClientTreansfer leaseClientTreansfer) { this.messengerSender = messengerSender; this.clientSignInState = clientSignInState; this.config = config; this.tuntapProxy = tuntapProxy; this.runningConfig = runningConfig; - this.linkerTunDeviceAdapter = linkerTunDeviceAdapter; this.tuntapTransfer = tuntapTransfer; this.leaseClientTreansfer = leaseClientTreansfer; - PingTask(); - clientSignInState.NetworkEnabledHandle += NetworkEanble; + clientSignInState.NetworkEnabledHandle += (times) => RefreshIP(); tuntapTransfer.OnSetupBefore += () => { NotifyConfig(); }; tuntapTransfer.OnSetupAfter += () => { NotifyConfig(); }; @@ -58,90 +49,76 @@ namespace linker.plugins.tuntap.client tuntapTransfer.OnShutdownSuccess += () => { NotifyConfig(); DeleteForward(); DelRoute(); runningConfig.Data.Tuntap.Running = false; runningConfig.Data.Update(); }; } - private void NetworkEanble(int times) - { - TimerHelper.Async(async () => - { - if (runningConfig.Data.Tuntap.Group2IP.TryGetValue(config.Data.Client.Group.Id, out TuntapGroup2IPInfo tuntapGroup2IPInfo)) - { - if (tuntapGroup2IPInfo.IP.Equals(runningConfig.Data.Tuntap.IP) == false || tuntapGroup2IPInfo.PrefixLength != runningConfig.Data.Tuntap.PrefixLength) - { - runningConfig.Data.Tuntap.IP = tuntapGroup2IPInfo.IP; - runningConfig.Data.Tuntap.PrefixLength = tuntapGroup2IPInfo.PrefixLength; - } - } - if (runningConfig.Data.Tuntap.Running || runningConfig.Data.Tuntap.IP.Equals(IPAddress.Any) == false) - { - LeaseInfo leaseInfo = await leaseClientTreansfer.LeaseIp(runningConfig.Data.Tuntap.IP, runningConfig.Data.Tuntap.PrefixLength); - runningConfig.Data.Tuntap.IP = leaseInfo.IP; - runningConfig.Data.Tuntap.PrefixLength = leaseInfo.PrefixLength; - runningConfig.Data.Update(); - } - if (tuntapTransfer.Status == TuntapStatus.Running && times > 0) - { - tuntapTransfer.Shutdown(); - tuntapTransfer.Setup(); - } - if (times == 0) - { - LoggerHelper.Instance.Debug($"tuntap initialize->{runningConfig.Data.Tuntap.Running}"); - if (runningConfig.Data.Tuntap.Running) - { - tuntapTransfer.Shutdown(); - LoggerHelper.Instance.Debug($"tuntap should be run"); - tuntapTransfer.Setup(); - } - } - NotifyConfig(); - }); - } /// /// 刷新IP /// public void RefreshIP() { - if (runningConfig.Data.Tuntap.Running || runningConfig.Data.Tuntap.IP.Equals(IPAddress.Any) == false) + TimerHelper.Async(async () => { - TimerHelper.Async(async () => + IPAddress oldIP = runningConfig.Data.Tuntap.IP; + byte prefixLength = runningConfig.Data.Tuntap.PrefixLength; + + await LeaseIP(); + while (tuntapTransfer.Status == TuntapStatus.Operating) { - IPAddress oldIP = runningConfig.Data.Tuntap.IP; - byte prefixLength = runningConfig.Data.Tuntap.PrefixLength; + await Task.Delay(1000); + } - LeaseInfo leaseInfo = await leaseClientTreansfer.LeaseIp(runningConfig.Data.Tuntap.IP, runningConfig.Data.Tuntap.PrefixLength); - runningConfig.Data.Tuntap.IP = leaseInfo.IP; - runningConfig.Data.Tuntap.PrefixLength = leaseInfo.PrefixLength; - runningConfig.Data.Update(); + bool run = ((oldIP.Equals(runningConfig.Data.Tuntap.IP) == false || prefixLength != runningConfig.Data.Tuntap.PrefixLength) && runningConfig.Data.Tuntap.Running) + || (runningConfig.Data.Tuntap.Running && tuntapTransfer.Status != TuntapStatus.Running); - TuntapGroup2IPInfo tuntapGroup2IPInfo = new TuntapGroup2IPInfo { IP = runningConfig.Data.Tuntap.IP, PrefixLength = runningConfig.Data.Tuntap.PrefixLength }; - runningConfig.Data.Tuntap.Group2IP.AddOrUpdate(config.Data.Client.Group.Id, tuntapGroup2IPInfo, (a, b) => tuntapGroup2IPInfo); - - while (tuntapTransfer.Status == TuntapStatus.Operating) - { - await Task.Delay(1000); - } - - if ((oldIP.Equals(runningConfig.Data.Tuntap.IP) == false || prefixLength != runningConfig.Data.Tuntap.PrefixLength) && tuntapTransfer.Status == TuntapStatus.Running) - { - tuntapTransfer.Shutdown(); - tuntapTransfer.Setup(); - } - NotifyConfig(); - }); - } + if (run) + { + tuntapTransfer.Shutdown(); + tuntapTransfer.Setup(runningConfig.Data.Tuntap.IP, runningConfig.Data.Tuntap.PrefixLength); + } + NotifyConfig(); + }); } - public async Task RefreshIPForce() + /// + /// 重启网卡 + /// + /// + public async Task RetstartDevice() { - LeaseInfo leaseInfo = await leaseClientTreansfer.LeaseIp(runningConfig.Data.Tuntap.IP, runningConfig.Data.Tuntap.PrefixLength); - runningConfig.Data.Tuntap.IP = leaseInfo.IP; - runningConfig.Data.Tuntap.PrefixLength = leaseInfo.PrefixLength; - runningConfig.Data.Update(); - - TuntapGroup2IPInfo tuntapGroup2IPInfo = new TuntapGroup2IPInfo { IP = runningConfig.Data.Tuntap.IP, PrefixLength = runningConfig.Data.Tuntap.PrefixLength }; + tuntapTransfer.Shutdown(); + await LeaseIP(); + tuntapTransfer.Setup(runningConfig.Data.Tuntap.IP, runningConfig.Data.Tuntap.PrefixLength); + } + /// + /// 关闭网卡 + /// + public void StopDevice() + { + tuntapTransfer.Shutdown(); + } + /// + /// 租赁IP + /// + /// + private async Task LeaseIP() + { + if (runningConfig.Data.Tuntap.Group2IP.TryGetValue(config.Data.Client.Group.Id, out TuntapGroup2IPInfo tuntapGroup2IPInfo)) + { + if (tuntapGroup2IPInfo.IP.Equals(runningConfig.Data.Tuntap.IP) == false || tuntapGroup2IPInfo.PrefixLength != runningConfig.Data.Tuntap.PrefixLength) + { + runningConfig.Data.Tuntap.IP = tuntapGroup2IPInfo.IP; + runningConfig.Data.Tuntap.PrefixLength = tuntapGroup2IPInfo.PrefixLength; + } + } + if (runningConfig.Data.Tuntap.Running || runningConfig.Data.Tuntap.IP.Equals(IPAddress.Any) == false) + { + LeaseInfo leaseInfo = await leaseClientTreansfer.LeaseIp(runningConfig.Data.Tuntap.IP, runningConfig.Data.Tuntap.PrefixLength); + runningConfig.Data.Tuntap.IP = leaseInfo.IP; + runningConfig.Data.Tuntap.PrefixLength = leaseInfo.PrefixLength; + runningConfig.Data.Update(); + } + tuntapGroup2IPInfo = new TuntapGroup2IPInfo { IP = runningConfig.Data.Tuntap.IP, PrefixLength = runningConfig.Data.Tuntap.PrefixLength }; runningConfig.Data.Tuntap.Group2IP.AddOrUpdate(config.Data.Client.Group.Id, tuntapGroup2IPInfo, (a, b) => tuntapGroup2IPInfo); - } /// @@ -177,7 +154,7 @@ namespace linker.plugins.tuntap.client if (tuntapTransfer.Status == TuntapStatus.Running && needReboot) { tuntapTransfer.Shutdown(); - tuntapTransfer.Setup(); + tuntapTransfer.Setup(runningConfig.Data.Tuntap.IP, runningConfig.Data.Tuntap.PrefixLength); } else { @@ -275,6 +252,11 @@ namespace linker.plugins.tuntap.client /// private TuntapInfo GetLocalInfo() { + if (runningConfig.Data.Tuntap.LanIPs.Length == 0) + { + runningConfig.Data.Tuntap.LanIPs = [clientSignInState.Connection.LocalAddress.Address]; + runningConfig.Data.Tuntap.Masks = [24]; + } TuntapInfo info = new TuntapInfo { IP = runningConfig.Data.Tuntap.IP, @@ -458,51 +440,5 @@ namespace linker.plugins.tuntap.client }; } - - private readonly LastTicksManager lastTicksManager = new LastTicksManager(); - public void SubscribePing() - { - lastTicksManager.Update(); - } - private void PingTask() - { - TimerHelper.SetInterval(async () => - { - if (tuntapTransfer.Status == TuntapStatus.Running && lastTicksManager.DiffLessEqual(5000)) - { - await Ping(); - } - return true; - }, 3000); - TimerHelper.SetInterval(async () => - { - if (tuntapTransfer.Status == TuntapStatus.Running && lastTicksManager.DiffGreater(15000)) - { - await Ping(); - } - return true; - }, 30000); - } - private async Task Ping() - { - if (tuntapTransfer.Status == TuntapStatus.Running && (runningConfig.Data.Tuntap.Switch & TuntapSwitch.ShowDelay) == TuntapSwitch.ShowDelay) - { - var items = tuntapInfos.Values.Where(c => c.IP != null && c.IP.Equals(IPAddress.Any) == false && (c.Status & TuntapStatus.Running) == TuntapStatus.Running); - if ((runningConfig.Data.Tuntap.Switch & TuntapSwitch.AutoConnect) != TuntapSwitch.AutoConnect) - { - var connections = tuntapProxy.GetConnections(); - items = items.Where(c => connections.TryGetValue(c.MachineId, out ITunnelConnection connection) && connection.Connected || c.MachineId == config.Data.Client.Id); - } - - foreach (var item in items) - { - using Ping ping = new Ping(); - PingReply pingReply = await ping.SendPingAsync(item.IP, 500); - item.Delay = pingReply.Status == IPStatus.Success ? (int)pingReply.RoundtripTime : -1; - - Version.Add(); - } - } - } } } diff --git a/linker/plugins/tuntap/client/TuntapDeviceStatusTransfer.cs b/linker/plugins/tuntap/client/TuntapDeviceStatusTransfer.cs new file mode 100644 index 00000000..2e42c800 --- /dev/null +++ b/linker/plugins/tuntap/client/TuntapDeviceStatusTransfer.cs @@ -0,0 +1,68 @@ +using linker.client.config; +using linker.libs; +using linker.plugins.tuntap.config; +using linker.tun; +using System.Net.NetworkInformation; + +namespace linker.plugins.tuntap.client +{ + public sealed class TuntapDeviceStatusTransfer + { + private readonly RunningConfig runningConfig; + private readonly TuntapTransfer tuntapTransfer; + private readonly TuntapConfigTransfer tuntapConfigTransfer; + private readonly LinkerTunDeviceAdapter linkerTunDeviceAdapter; + private ulong setupTimes = 0; + public TuntapDeviceStatusTransfer(RunningConfig runningConfig, TuntapTransfer tuntapTransfer, TuntapConfigTransfer tuntapConfigTransfer, LinkerTunDeviceAdapter linkerTunDeviceAdapter) + { + this.runningConfig = runningConfig; + this.tuntapTransfer = tuntapTransfer; + this.tuntapConfigTransfer = tuntapConfigTransfer; + this.linkerTunDeviceAdapter = linkerTunDeviceAdapter; + + tuntapTransfer.OnSetupSuccess += () => { setupTimes++; }; + } + private void CheckTuntapStatusTask() + { + TimerHelper.SetInterval(async () => + { + if (setupTimes > 0 && runningConfig.Data.Tuntap.Running && OperatingSystem.IsWindows()) + { + await InterfaceCheck().ConfigureAwait(false); + } + return true; + }, () => 15000); + } + private async Task InterfaceCheck() + { + if (await InterfaceAvailable() == false && tuntapTransfer.Status != TuntapStatus.Operating) + { + LoggerHelper.Instance.Error($"tuntap inerface {tuntapTransfer.DeviceName} is down, restarting"); + linkerTunDeviceAdapter.Shutdown(); + await Task.Delay(5000).ConfigureAwait(false); + if (await InterfaceAvailable() == false && tuntapTransfer.Status != TuntapStatus.Operating) + { + await tuntapConfigTransfer.RetstartDevice(); + } + } + } + private async Task InterfaceAvailable() + { + NetworkInterface networkInterface = NetworkInterface.GetAllNetworkInterfaces().FirstOrDefault(c => c.Name == tuntapTransfer.DeviceName); + return networkInterface != null && networkInterface.OperationalStatus == OperationalStatus.Up && await InterfacePing(); + } + private async Task InterfacePing() + { + try + { + using Ping ping = new Ping(); + PingReply pingReply = await ping.SendPingAsync(runningConfig.Data.Tuntap.IP, 500); + return pingReply.Status == IPStatus.Success; + } + catch (Exception) + { + return false; + } + } + } +} diff --git a/linker/plugins/tuntap/client/TuntapPingTransfer.cs b/linker/plugins/tuntap/client/TuntapPingTransfer.cs new file mode 100644 index 00000000..7a6cfe09 --- /dev/null +++ b/linker/plugins/tuntap/client/TuntapPingTransfer.cs @@ -0,0 +1,67 @@ +using linker.client.config; +using linker.libs; +using linker.plugins.tuntap.config; +using linker.tunnel.connection; +using System.Net.NetworkInformation; +using System.Net; +using linker.config; + +namespace linker.plugins.tuntap.client +{ + public sealed class TuntapPingTransfer + { + private readonly TuntapTransfer tuntapTransfer; + private readonly TuntapConfigTransfer tuntapConfigTransfer; + private readonly FileConfig config; + private readonly TuntapProxy tuntapProxy; + private readonly RunningConfig runningConfig; + public TuntapPingTransfer(TuntapTransfer tuntapTransfer, TuntapConfigTransfer tuntapConfigTransfer, FileConfig config, TuntapProxy tuntapProxy, RunningConfig runningConfig) + { + this.tuntapTransfer = tuntapTransfer; + this.tuntapConfigTransfer = tuntapConfigTransfer; + this.config = config; + this.tuntapProxy = tuntapProxy; + this.runningConfig = runningConfig; + PingTask(); + + } + + private readonly LastTicksManager lastTicksManager = new LastTicksManager(); + public void SubscribePing() + { + lastTicksManager.Update(); + } + private void PingTask() + { + TimerHelper.SetInterval(async () => + { + if (tuntapTransfer.Status == TuntapStatus.Running && lastTicksManager.DiffLessEqual(5000)) + { + await Ping(); + } + return true; + }, () => tuntapTransfer.Status == TuntapStatus.Running && lastTicksManager.DiffLessEqual(5000) ? 3000 : 30000); + } + private async Task Ping() + { + if (tuntapTransfer.Status == TuntapStatus.Running && (runningConfig.Data.Tuntap.Switch & TuntapSwitch.ShowDelay) == TuntapSwitch.ShowDelay) + { + var items = tuntapConfigTransfer.Infos.Values.Where(c => c.IP != null && c.IP.Equals(IPAddress.Any) == false && (c.Status & TuntapStatus.Running) == TuntapStatus.Running); + if ((runningConfig.Data.Tuntap.Switch & TuntapSwitch.AutoConnect) != TuntapSwitch.AutoConnect) + { + var connections = tuntapProxy.GetConnections(); + items = items.Where(c => connections.TryGetValue(c.MachineId, out ITunnelConnection connection) && connection.Connected || c.MachineId == config.Data.Client.Id); + } + + foreach (var item in items) + { + using Ping ping = new Ping(); + PingReply pingReply = await ping.SendPingAsync(item.IP, 500); + item.Delay = pingReply.Status == IPStatus.Success ? (int)pingReply.RoundtripTime : -1; + + tuntapConfigTransfer.Version.Add(); + } + } + } + } +} diff --git a/linker/plugins/tuntap/client/TuntapTransfer.cs b/linker/plugins/tuntap/client/TuntapTransfer.cs index db8b6ca3..bcd72533 100644 --- a/linker/plugins/tuntap/client/TuntapTransfer.cs +++ b/linker/plugins/tuntap/client/TuntapTransfer.cs @@ -1,7 +1,6 @@ using linker.client.config; using linker.libs; using System.Net; -using System.Net.NetworkInformation; using linker.plugins.client; using linker.plugins.tuntap.config; using linker.tun; @@ -10,15 +9,17 @@ namespace linker.plugins.tuntap.client { public sealed class TuntapTransfer { - private readonly RunningConfig runningConfig; private readonly LinkerTunDeviceAdapter linkerTunDeviceAdapter; - private string deviceName = "linker"; + + private OperatingManager operatingManager = new OperatingManager(); public TuntapStatus Status => operatingManager.Operating ? TuntapStatus.Operating : (TuntapStatus)(byte)linkerTunDeviceAdapter.Status; public string Error => linkerTunDeviceAdapter.Error; public string Error1 => linkerTunDeviceAdapter.Error1; + public string DeviceName => "linker"; + public Action OnSetupBefore { get; set; } = () => { }; public Action OnSetupAfter { get; set; } = () => { }; public Action OnSetupSuccess { get; set; } = () => { }; @@ -26,25 +27,19 @@ namespace linker.plugins.tuntap.client public Action OnShutdownAfter { get; set; } = () => { }; public Action OnShutdownSuccess { get; set; } = () => { }; - private ulong setupTimes = 0; - public TuntapTransfer(ClientSignInState clientSignInState, LinkerTunDeviceAdapter linkerTunDeviceAdapter, TuntapProxy tuntapProxy, RunningConfig runningConfig) { this.linkerTunDeviceAdapter = linkerTunDeviceAdapter; - this.runningConfig = runningConfig; - linkerTunDeviceAdapter.Initialize(deviceName, tuntapProxy); + linkerTunDeviceAdapter.Initialize(DeviceName, tuntapProxy); AppDomain.CurrentDomain.ProcessExit += (s, e) => linkerTunDeviceAdapter.Shutdown(); Console.CancelKeyPress += (s, e) => linkerTunDeviceAdapter.Shutdown(); - - - CheckTuntapStatusTask(); } /// /// 运行网卡 /// - public void Setup() + public void Setup(IPAddress ip,byte prefixLength) { if (operatingManager.StartOperation() == false) { @@ -55,14 +50,13 @@ namespace linker.plugins.tuntap.client OnSetupBefore(); try { - if (runningConfig.Data.Tuntap.IP.Equals(IPAddress.Any)) + if (ip.Equals(IPAddress.Any)) { return; } - linkerTunDeviceAdapter.Setup(runningConfig.Data.Tuntap.IP, runningConfig.Data.Tuntap.PrefixLength, 1400); + linkerTunDeviceAdapter.Setup(ip, prefixLength, 1400); if (string.IsNullOrWhiteSpace(linkerTunDeviceAdapter.Error)) { - setupTimes++; linkerTunDeviceAdapter.SetNat(); OnSetupSuccess(); } @@ -135,51 +129,5 @@ namespace linker.plugins.tuntap.client linkerTunDeviceAdapter.DelRoute(ips); } - - private void CheckTuntapStatusTask() - { - TimerHelper.SetInterval(async () => - { - if (setupTimes > 0 && runningConfig.Data.Tuntap.Running && OperatingSystem.IsWindows()) - { - await InterfaceCheck().ConfigureAwait(false); - } - return true; - }, 15000); - } - private async Task InterfaceCheck() - { - if (await InterfaceAvailable() == false && operatingManager.Operating == false) - { - LoggerHelper.Instance.Error($"tuntap inerface {deviceName} is down, restarting"); - linkerTunDeviceAdapter.Shutdown(); - await Task.Delay(5000).ConfigureAwait(false); - if (await InterfaceAvailable() == false && operatingManager.Operating == false) - { - Setup(); - } - } - } - private async Task InterfaceAvailable() - { - NetworkInterface networkInterface = NetworkInterface.GetAllNetworkInterfaces().FirstOrDefault(c => c.Name == deviceName); - return networkInterface != null && networkInterface.OperationalStatus == OperationalStatus.Up && await InterfacePing(); - } - private async Task InterfacePing() - { - try - { - using Ping ping = new Ping(); - PingReply pingReply = await ping.SendPingAsync(runningConfig.Data.Tuntap.IP, 500); - return pingReply.Status == IPStatus.Success; - } - catch (Exception) - { - return false; - } - } - - - } } diff --git a/linker/plugins/tuntap/lease/LeaseClientTreansfer.cs b/linker/plugins/tuntap/lease/LeaseClientTreansfer.cs index 68b89f66..42d13f91 100644 --- a/linker/plugins/tuntap/lease/LeaseClientTreansfer.cs +++ b/linker/plugins/tuntap/lease/LeaseClientTreansfer.cs @@ -84,7 +84,7 @@ namespace linker.plugins.tuntap.lease }); return true; - }, 30000); + }, () => 60000); } } } diff --git a/linker/plugins/tuntap/messenger/TuntapMessenger.cs b/linker/plugins/tuntap/messenger/TuntapMessenger.cs index 29e61508..e8e534ca 100644 --- a/linker/plugins/tuntap/messenger/TuntapMessenger.cs +++ b/linker/plugins/tuntap/messenger/TuntapMessenger.cs @@ -6,7 +6,6 @@ using linker.plugins.tuntap.client; using linker.plugins.tuntap.config; using linker.plugins.tuntap.lease; using MemoryPack; -using System.Net; namespace linker.plugins.tuntap.messenger { @@ -31,12 +30,7 @@ namespace linker.plugins.tuntap.messenger [MessengerId((ushort)TuntapMessengerIds.Run)] public void Run(IConnection connection) { - TimerHelper.Async(async () => - { - tuntapTransfer.Shutdown(); - await tuntapConfigTransfer.RefreshIPForce(); - tuntapTransfer.Setup(); - }); + _ = tuntapConfigTransfer.RetstartDevice(); } /// @@ -46,7 +40,7 @@ namespace linker.plugins.tuntap.messenger [MessengerId((ushort)TuntapMessengerIds.Stop)] public void Stop(IConnection connection) { - tuntapTransfer.Shutdown(); + tuntapConfigTransfer.StopDevice(); } /// diff --git a/linker/plugins/updater/UpdaterClientTransfer.cs b/linker/plugins/updater/UpdaterClientTransfer.cs index 3bfe2bb5..57b13fa9 100644 --- a/linker/plugins/updater/UpdaterClientTransfer.cs +++ b/linker/plugins/updater/UpdaterClientTransfer.cs @@ -80,17 +80,18 @@ namespace linker.plugins.updater } + private readonly LastTicksManager lastTicksManager = new LastTicksManager(); public void Subscribe(string machineId) { - if (subscribes.TryGetValue(machineId, out LastTicksManager lastTicksManager) == false) + if (subscribes.TryGetValue(machineId, out LastTicksManager _lastTicksManager) == false) { - lastTicksManager = new LastTicksManager(); - subscribes.TryAdd(machineId, lastTicksManager); + _lastTicksManager = new LastTicksManager(); + subscribes.TryAdd(machineId, _lastTicksManager); } //距离上次订阅超过一分钟,需要立即更新一次 - bool needUpdate = lastTicksManager.DiffGreater(60 * 1000); - + bool needUpdate = _lastTicksManager.DiffGreater(60 * 1000); + _lastTicksManager.Update(); lastTicksManager.Update(); if (needUpdate) @@ -119,7 +120,7 @@ namespace linker.plugins.updater Update(updateInfo); } return true; - }, 1000); + }, () => lastTicksManager.DiffLessEqual(5000) ? 1000 : 15000); } private void LoadTask() @@ -128,7 +129,7 @@ namespace linker.plugins.updater { await updaterHelper.GetUpdateInfo(updateInfo); return true; - }, 15000); + }, () => 30000); } } diff --git a/version.txt b/version.txt index 2f8dbab8..2323d2d5 100644 --- a/version.txt +++ b/version.txt @@ -1,8 +1,9 @@ -v1.4.9 -2024-10-18 17:15:48 +v1.5.0 +2024-10-20 18:50:45 1. 新增多分组管理,方便分组切换 2. 增加分组密码,提高分组隔离安全性 3. 优化配置同步,可自由选择同步哪些信息 4. 自动分配虚拟网卡IP 5. 线程池优化 -6. 一些UI优化 \ No newline at end of file +6. 一些UI优化 +7. 测试中,不要更新,不要更新,不要更新,请使用v1.4.9 \ No newline at end of file