using AVEVA.Historian.Client.Models; namespace AVEVA.Historian.Client.StoreForward; /// /// The actual delivery target the forwarder replays buffered writes through. Abstracted from /// so the store-forward logic can be unit-tested without a server, and /// so callers can plug a custom delivery path. /// /// Contract: return true when the historian accepted the write; return false or throw /// when it did not. The forwarder treats both a false return and a thrown exception as "not /// delivered" and keeps the entry buffered for retry — so a transient disconnect (which throws) and /// a soft rejection (which returns false) are both safe. /// /// public interface IHistorianWriteSink { /// Delivers a batch of historical values for . Task SendHistoricalValuesAsync(string tag, IReadOnlyList values, CancellationToken cancellationToken); /// Delivers a single event. Task SendEventAsync(HistorianEvent historianEvent, CancellationToken cancellationToken); }