public async Task <IBleResult <T> > ReadAsync(IReaderBehavior <T> reader, CancellationToken cancellationToken)
        {
            IBleResult <T> result;

            try
            {
                if (_connector.IsConnected)
                {
                    result = await reader.ReadAsync(cancellationToken).ConfigureAwait(false);
                }
                else
                {
                    var connectionResult = await _connector.ConnectAsync(cancellationToken);

                    if (connectionResult.IsOperationCompleted)
                    {
                        cancellationToken.ThrowIfCancellationRequested();
                        result = await reader.ReadAsync(cancellationToken);
                    }
                    else
                    {
                        result = BleResult.Failure <T>(BleFailure.DeviceNotConnected, connectionResult);
                    }
                }
            }
            catch (OperationCanceledException)
            {
                result = BleResult.Failure <T>(BleFailure.OperationCancelled);
            }

            return(result);
        }
Example #2
0
 public static IReaderBehavior <TDecorated> Apply <TReader, TDecorated>(this IReaderBehavior <TReader> reader, IReaderDecorator <TReader, TDecorated> decorator)
 {
     return(new DecoratedReaderBehavior <TReader, TDecorated>(reader, decorator));
 }
Example #3
0
 public DecoratedReaderBehavior(IReaderBehavior <TReader> reader, IReaderDecorator <TReader, TDecorated> decorator)
 {
     _reader    = reader;
     _decorator = decorator;
 }
Example #4
0
        public async Task <IBleResult <TOut> > ReadAsync(IReaderBehavior <TIn> reader, CancellationToken cancellationToken)
        {
            var rawReadResult = await reader.ReadAsync(cancellationToken).ConfigureAwait(false);

            return(rawReadResult.Convert(_valueParser));
        }
 public Task <IBleResult <T> > ReadAsync(IReaderBehavior <T> reader, CancellationToken cancellationToken)
 {
     return(_executor.TimeoutBleOperationAsync(reader.ReadAsync, _timeout, cancellationToken));
 }