public override async Task <IBleResult> StartObservingAsync(IObserverBehavior <T> decoratedObserver, CancellationToken cancellationToken) { IBleResult result; try { if (_connector.IsConnected) { result = await decoratedObserver.StartObservingAsync(cancellationToken).ConfigureAwait(false); } else { var connectionResult = await _connector.ConnectAsync(cancellationToken); if (connectionResult.IsOperationCompleted) { cancellationToken.ThrowIfCancellationRequested(); result = await decoratedObserver.StartObservingAsync(cancellationToken); } else { result = BleResult.Failure(BleFailure.DeviceNotConnected, connectionResult); } } } catch (OperationCanceledException) { result = BleResult.Failure(BleFailure.OperationCancelled); } return(result); }
public DecoratedObserverBehavior(IObserverBehavior <TObserver> observerBehavior, IObserverDecorator <TObserver, TDecorated> decorator) { _observerBehavior = observerBehavior; _decorator = decorator; _decorator.OnAttached(_observerBehavior); }
public override IDisposable Subscribe(IObserverBehavior <T> decoratedObserver, IObserver <T> observer) => decoratedObserver.Subscribe(observer);
public static IObserverBehavior <TDecorated> Apply <TObserver, TDecorated>(this IObserverBehavior <TObserver> observer, IObserverDecorator <TObserver, TDecorated> decorator) { return(new DecoratedObserverBehavior <TObserver, TDecorated>(observer, decorator)); }
public override IDisposable Subscribe(IObserverBehavior <TObserver> decoratedObserver, IObserver <TDecorated> observer) { _subscriber.AddValue(observer); return(new ObservableUnsubscriber <TDecorated>(_subscriber, observer)); }
public override void OnAttached(IObserverBehavior <TObserver> decoratedObserver) { _observerUnsubscriber?.Dispose(); _observerUnsubscriber = decoratedObserver.Subscribe(this); }
public override Task <IBleResult> StopObservingAsync(IObserverBehavior <T> decoratedObserver, CancellationToken cancellationToken) { return(_executor.TimeoutBleOperationAsync(decoratedObserver.StopObservingAsync, _timeout, cancellationToken)); }
public virtual bool IsObserving(IObserverBehavior <TObserver> decoratedObserver) => decoratedObserver.IsObserving;
public abstract IDisposable Subscribe(IObserverBehavior <TObserver> decoratedObserver, IObserver <TDecorated> observer);
public virtual Task <IBleResult> StopObservingAsync(IObserverBehavior <TObserver> decoratedObserver, CancellationToken cancellationToken) { return(decoratedObserver.StopObservingAsync(cancellationToken)); }
public virtual void OnAttached(IObserverBehavior <TObserver> decoratedObserver) { }