From 65f61eec82cd4a9a202339a0afd9186a523623b8 Mon Sep 17 00:00:00 2001 From: Jared Goodwin Date: Sat, 24 Jun 2023 12:12:50 -0700 Subject: [PATCH] Add FilterDevicesByOnlineStatus to AgentHubSessionCache. --- Server/Components/Scripts/RunScript.razor.cs | 2 +- Server/Services/AgentHubSessionCache.cs | 14 ++++++++++++++ Server/Services/ScriptScheduleDispatcher.cs | 2 +- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/Server/Components/Scripts/RunScript.razor.cs b/Server/Components/Scripts/RunScript.razor.cs index 2f78b3fa..d10c4e31 100644 --- a/Server/Components/Scripts/RunScript.razor.cs +++ b/Server/Components/Scripts/RunScript.razor.cs @@ -123,7 +123,7 @@ namespace Remotely.Server.Components.Scripts var filteredDevices = DataService.FilterDeviceIDsByUserPermission(deviceIds.ToArray(), User); - var onlineDevices = ServiceSessionCache.GetConnectionIdsByDeviceIds(filteredDevices); + var onlineDevices = ServiceSessionCache.FilterDevicesByOnlineStatus(filteredDevices, true); var scriptRun = new ScriptRun() { diff --git a/Server/Services/AgentHubSessionCache.cs b/Server/Services/AgentHubSessionCache.cs index 127a0c2a..2d208891 100644 --- a/Server/Services/AgentHubSessionCache.cs +++ b/Server/Services/AgentHubSessionCache.cs @@ -9,6 +9,8 @@ namespace Remotely.Server.Services public interface IAgentHubSessionCache { void AddOrUpdateByConnectionId(string connectionId, Device device); + IEnumerable FilterDevicesByOnlineStatus(IEnumerable deviceIds, bool isOnline); + ICollection GetAllDevices(); IEnumerable GetConnectionIdsByDeviceIds(IEnumerable deviceIds); bool TryGetByDeviceId(string deviceId, out Device device); @@ -28,6 +30,18 @@ namespace Remotely.Server.Services _deviceIdToConnectionIdLookup.AddOrUpdate(device.ID, connectionId, (k, v) => connectionId); } + public IEnumerable FilterDevicesByOnlineStatus(IEnumerable deviceIds, bool isOnline) + { + foreach (var deviceId in deviceIds) + { + var result = TryGetConnectionId(deviceId, out _); + if (result == isOnline) + { + yield return deviceId; + } + } + } + public ICollection GetAllDevices() => _connectionIdToDeviceLookup.Values; public IEnumerable GetConnectionIdsByDeviceIds(IEnumerable deviceIds) diff --git a/Server/Services/ScriptScheduleDispatcher.cs b/Server/Services/ScriptScheduleDispatcher.cs index d2773029..c112e40c 100644 --- a/Server/Services/ScriptScheduleDispatcher.cs +++ b/Server/Services/ScriptScheduleDispatcher.cs @@ -85,7 +85,7 @@ namespace Remotely.Server.Services .Distinct() .ToArray(); - var onlineDevices = _serviceSessionCache.GetConnectionIdsByDeviceIds(deviceIds); + var onlineDevices = _serviceSessionCache.FilterDevicesByOnlineStatus(deviceIds, true); if (schedule.RunOnNextConnect) {