JD2022-TU1/main/tools/services/JD.Adobe.Service/TargetMemories/AutoTargetMemory.cs

65 lines
No EOL
1.9 KiB
C#

using System;
using System.Linq;
using JD.Adobe.Service.API;
using Plume.Core.Logging;
using Shuttle.Servers;
namespace JD.Adobe.Service.TargetMemories
{
public class AutoTargetMemory : SimpleTargetMemory, IDisposable
{
private readonly IAdobeService _adobeService;
public AutoTargetMemory(ILogger logger, IAdobeService adobeService) : base(logger)
{
_adobeService = adobeService ?? throw new ArgumentNullException(nameof(adobeService));
_adobeService.OnTargetAdded += UpdateTarget;
_adobeService.OnTargetRemoved += ClearTargetIfNeeded;
}
private void UpdateTarget(TargetAppInfo addedTarget)
{
if (addedTarget == null)
throw new ArgumentNullException(nameof(addedTarget));
if (addedTarget == Target)
return;
if (!_adobeService.GetAvailableTargets().Contains(addedTarget))
throw new InvalidOperationException($"Target {addedTarget.AppType} {addedTarget.ConnectionId} has not been correctly registered");
SetTarget(addedTarget);
}
private void ClearTargetIfNeeded(TargetAppInfo disconnectedTarget)
{
if (disconnectedTarget == null)
{
throw new ArgumentNullException(nameof(disconnectedTarget));
}
if (disconnectedTarget != Target)
{
return;
}
var availableTargets = _adobeService.GetAvailableTargets();
if (availableTargets.Count == 0)
{
ClearTarget();
}
else
{
var newTarget = availableTargets.First();
SetTarget(newTarget);
}
}
public void Dispose()
{
_adobeService.OnTargetRemoved -= ClearTargetIfNeeded;
_adobeService.OnTargetRemoved -= UpdateTarget;
}
}
}