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); }
public static IReaderBehavior <TDecorated> Apply <TReader, TDecorated>(this IReaderBehavior <TReader> reader, IReaderDecorator <TReader, TDecorated> decorator) { return(new DecoratedReaderBehavior <TReader, TDecorated>(reader, decorator)); }
public DecoratedReaderBehavior(IReaderBehavior <TReader> reader, IReaderDecorator <TReader, TDecorated> decorator) { _reader = reader; _decorator = decorator; }
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)); }