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);
Beispiel #4
0
 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);
 }
Beispiel #7
0
 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)
 {
 }