using ZB.MOM.WW.LmxProxy.Client.Domain;
namespace ScadaLink.DataConnectionLayer.Adapters;
///
/// Subscription handle returned by .
/// Disposing the subscription stops receiving updates.
///
public interface ILmxSubscription : IAsyncDisposable { }
///
/// Abstraction over the LmxProxy SDK client for testability.
/// The production implementation delegates to the real
/// library.
///
public interface ILmxProxyClient : IAsyncDisposable
{
bool IsConnected { get; }
Task ConnectAsync(CancellationToken cancellationToken = default);
Task DisconnectAsync();
Task ReadAsync(string address, CancellationToken cancellationToken = default);
Task> ReadBatchAsync(IEnumerable addresses, CancellationToken cancellationToken = default);
Task WriteAsync(string address, TypedValue value, CancellationToken cancellationToken = default);
Task WriteBatchAsync(IDictionary values, CancellationToken cancellationToken = default);
Task SubscribeAsync(
IEnumerable addresses,
Action onUpdate,
Action? onStreamError = null,
CancellationToken cancellationToken = default);
}
///
/// Factory for creating instances configured
/// with host, port, and optional API key.
///
public interface ILmxProxyClientFactory
{
ILmxProxyClient Create(string host, int port, string? apiKey, bool useTls = false);
}