From de26d22f79fbf3fa9fea35680e32ee21551cebec Mon Sep 17 00:00:00 2001 From: uye <99072975+ABA2396@users.noreply.github.com> Date: Mon, 26 Aug 2024 00:10:56 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E8=8E=B7=E5=8F=96=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E7=AB=AF=E5=8F=A3=E6=97=A0=E6=95=88=E6=97=B6=E4=B8=8D?= =?UTF-8?q?=E8=BF=9B=E8=A1=8C=E8=BD=AE=E8=AF=A2=20(#10321)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RemoteControl/RemoteControlService.cs | 47 +++++++++++++++++-- .../ViewModels/UI/SettingsViewModel.cs | 7 ++- 2 files changed, 48 insertions(+), 6 deletions(-) diff --git a/src/MaaWpfGui/Services/RemoteControl/RemoteControlService.cs b/src/MaaWpfGui/Services/RemoteControl/RemoteControlService.cs index b90478f2be..9fe7cf51d6 100644 --- a/src/MaaWpfGui/Services/RemoteControl/RemoteControlService.cs +++ b/src/MaaWpfGui/Services/RemoteControl/RemoteControlService.cs @@ -14,6 +14,7 @@ using System; using System.Collections.Concurrent; using System.Collections.Generic; +using System.ComponentModel; using System.IO; using System.Linq; using System.Net.Http; @@ -40,18 +41,37 @@ namespace MaaWpfGui.Services.RemoteControl // ReSharper disable once ClassNeverInstantiated.Global public class RemoteControlService { - private readonly Task _pollJobTask = Task.CompletedTask; + private Task _pollJobTask = Task.CompletedTask; private readonly List _enqueueTaskIds = new List(); private readonly ConcurrentQueue _sequentialTaskQueue = new ConcurrentQueue(); private readonly ConcurrentQueue _instantTaskQueue = new ConcurrentQueue(); - private readonly Task _executeSequentialJobTask = Task.CompletedTask; - private readonly Task _executeInstantJobTask = Task.CompletedTask; + private Task _executeSequentialJobTask = Task.CompletedTask; + private Task _executeInstantJobTask = Task.CompletedTask; private readonly RunningState _runningState; + private bool _inited = false; private string _currentSequentialTaskId = string.Empty; public RemoteControlService() { + InitializePollJobTask(); + _runningState = RunningState.Instance; + } + + public void InitializePollJobTask() + { + if (_inited) + { + return; + } + + if (!IsEndpointValid(Instances.SettingsViewModel.RemoteControlGetTaskEndpointUri)) + { + return; + } + + _inited = true; + _pollJobTask = _pollJobTask.ContinueWith(async _ => { while (true) @@ -59,6 +79,13 @@ namespace MaaWpfGui.Services.RemoteControl await Task.Delay(1000); try { + if (!IsEndpointValid(Instances.SettingsViewModel.RemoteControlGetTaskEndpointUri)) + { + Log.Logger.Information("RemoteControlGetTaskEndpointUri is not valid, return"); + _inited = false; + return; + } + await PollJobTaskLoop(); } catch (Exception ex) @@ -77,6 +104,12 @@ namespace MaaWpfGui.Services.RemoteControl await Task.Delay(1000); try { + if (!IsEndpointValid(Instances.SettingsViewModel.RemoteControlGetTaskEndpointUri)) + { + Log.Logger.Information("RemoteControlGetTaskEndpointUri is not valid, return"); + return; + } + await ExecuteSequentialJobLoop(); } catch (Exception ex) @@ -95,6 +128,12 @@ namespace MaaWpfGui.Services.RemoteControl await Task.Delay(1000); try { + if (!IsEndpointValid(Instances.SettingsViewModel.RemoteControlGetTaskEndpointUri)) + { + Log.Logger.Information("RemoteControlGetTaskEndpointUri is not valid, return"); + return; + } + await ExecuteInstantJobLoop(); } catch (Exception ex) @@ -105,8 +144,6 @@ namespace MaaWpfGui.Services.RemoteControl // ReSharper disable once FunctionNeverReturns }); - - _runningState = RunningState.Instance; } #region Private Method Invoker diff --git a/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs b/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs index 261f00707a..e5101f0ce0 100755 --- a/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs @@ -378,7 +378,12 @@ namespace MaaWpfGui.ViewModels.UI get => _remoteControlGetTaskEndpointUri; set { - SetAndNotify(ref _remoteControlGetTaskEndpointUri, value); + if (!SetAndNotify(ref _remoteControlGetTaskEndpointUri, value)) + { + return; + } + + Instances.RemoteControlService.InitializePollJobTask(); ConfigurationHelper.SetValue(ConfigurationKeys.RemoteControlGetTaskEndpointUri, value); } }