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); } }