namespace LmxFakeProxy.Bridge; public record OpcUaReadResult(object? Value, DateTime SourceTimestamp, uint StatusCode); public interface IOpcUaBridge : IAsyncDisposable { bool IsConnected { get; } Task ConnectAsync(CancellationToken cancellationToken = default); Task ReadAsync(string nodeId, CancellationToken cancellationToken = default); Task WriteAsync(string nodeId, object? value, CancellationToken cancellationToken = default); Task AddMonitoredItemsAsync( IEnumerable nodeIds, int samplingIntervalMs, Action onValueChanged, CancellationToken cancellationToken = default); Task RemoveMonitoredItemsAsync(string handle, CancellationToken cancellationToken = default); event Action? Disconnected; event Action? Reconnected; }