65 lines
No EOL
1.9 KiB
C#
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;
|
|
}
|
|
}
|
|
} |