LongTextTapiBridgePool
using Relativity.Logging;
using System;
using System.Collections.Generic;
using System.Threading;
namespace Relativity.DataExchange.Export.VolumeManagerV2.Download.TapiHelpers
{
public class LongTextTapiBridgePool : ILongTextTapiBridgePool, IDisposable
{
private readonly object _syncRoot = new object();
private readonly List<IDownloadTapiBridge> _longTextTapiBridges;
private readonly ILongTextDownloadTapiBridgeFactory _factory;
private readonly ILog _logger;
public int Count {
get {
lock (_syncRoot) {
return _longTextTapiBridges.Count;
}
}
}
public LongTextTapiBridgePool(ILongTextDownloadTapiBridgeFactory factory, ILog logger)
{
_factory = factory;
_logger = logger;
_longTextTapiBridges = new List<IDownloadTapiBridge>();
}
public IDownloadTapiBridge Request(CancellationToken token)
{
IDownloadTapiBridge downloadTapiBridge = _factory.Create(token);
lock (_syncRoot) {
_longTextTapiBridges.Add(downloadTapiBridge);
return downloadTapiBridge;
}
}
public void Release(IDownloadTapiBridge bridge)
{
lock (_syncRoot) {
_longTextTapiBridges.Remove(bridge);
}
TryDisposeTapiBridge(bridge);
}
public void Dispose()
{
foreach (IDownloadTapiBridge longTextTapiBridge in _longTextTapiBridges) {
TryDisposeTapiBridge(longTextTapiBridge);
}
}
private void TryDisposeTapiBridge(IDownloadTapiBridge bridge)
{
try {
bridge?.Dispose();
} catch (Exception ex) {
_logger.LogError(ex, "Failed to dispose Tapi Bridge.", Array.Empty<object>());
}
}
}
}