using AVEVA.Historian.Client.Models; namespace AVEVA.Historian.Client.Redundancy; /// /// Default adapter over a . For durable /// redundant writes, pass a member whose write methods enqueue to an R4.1 /// HistorianStoreForwardWriter instead — then a member that is down buffers its writes and /// replays them on recovery (the pragmatic client-side equivalent of native ReSyncTags). /// public sealed class HistorianClientMember : IHistorianMember { private readonly HistorianClient _client; public HistorianClientMember(string name, HistorianClient client) { ArgumentException.ThrowIfNullOrWhiteSpace(name); Name = name; _client = client ?? throw new ArgumentNullException(nameof(client)); } public string Name { get; } public Task ProbeAsync(CancellationToken cancellationToken) => _client.ProbeAsync(cancellationToken); public IAsyncEnumerable ReadRawAsync(string tag, DateTime startUtc, DateTime endUtc, int maxValues, CancellationToken cancellationToken) => _client.ReadRawAsync(tag, startUtc, endUtc, maxValues, cancellationToken); public IAsyncEnumerable ReadAggregateAsync(string tag, DateTime startUtc, DateTime endUtc, RetrievalMode mode, TimeSpan interval, CancellationToken cancellationToken) => _client.ReadAggregateAsync(tag, startUtc, endUtc, mode, interval, cancellationToken); public Task> ReadAtTimeAsync(string tag, IReadOnlyList timestampsUtc, CancellationToken cancellationToken) => _client.ReadAtTimeAsync(tag, timestampsUtc, cancellationToken); public IAsyncEnumerable ReadEventsAsync(DateTime startUtc, DateTime endUtc, CancellationToken cancellationToken) => _client.ReadEventsAsync(startUtc, endUtc, cancellationToken); public IAsyncEnumerable BrowseTagNamesAsync(string filter, CancellationToken cancellationToken) => _client.BrowseTagNamesAsync(filter, cancellationToken); public Task GetTagMetadataAsync(string tag, CancellationToken cancellationToken) => _client.GetTagMetadataAsync(tag, cancellationToken); public Task AddHistoricalValuesAsync(string tag, IReadOnlyList values, CancellationToken cancellationToken) => _client.AddHistoricalValuesAsync(tag, values, cancellationToken); public Task SendEventAsync(HistorianEvent historianEvent, CancellationToken cancellationToken) => _client.SendEventAsync(historianEvent, cancellationToken); }