Пример #1
0
        private async Task <IBleResult <IReadOnlyList <IDevice> > > ExecuteDeviceSearchAsync(IDeviceFilter deviceFilter, bool stopAfterFirstResult, CancellationToken cancellationToken)
        {
            IBleResult <IReadOnlyList <IDevice> > result = null;

            try
            {
                await _searchSemaphore.WaitAsync(cancellationToken).ConfigureAwait(false);

                try
                {
                    var searchResult = await _bleAdapter.SearchAsync(deviceFilter, stopAfterFirstResult, _executor, _logger, cancellationToken);

                    result = BleResult.Success(searchResult);
                }
                finally
                {
                    _searchSemaphore.Release();
                }
            }
            catch (OperationCanceledException) { }
            catch (Exception e)
            {
                result = BleResult.Failure <IReadOnlyList <IDevice> >(e);
            }

            return(result);
        }
Пример #2
0
        public async Task <IBleResult> WriteAsync(IWriterBehavior <TIn> writer, TOut value, CancellationToken cancellationToken)
        {
            IBleResult result = null;

            try
            {
                using (var rawDataSequenceEnumerator = _valueConverter.Invoke(value).GetEnumerator())
                {
                    while (rawDataSequenceEnumerator.MoveNext() && result == null)
                    {
                        cancellationToken.ThrowIfCancellationRequested();
                        var writeChunkResult = await writer.WriteAsync(rawDataSequenceEnumerator.Current, cancellationToken).ConfigureAwait(false);

                        if (!writeChunkResult.IsOperationCompleted)
                        {
                            result = writeChunkResult;
                        }
                    }
                }

                result = result ?? BleResult.Success();
            }
            catch (OperationCanceledException)
            {
                result = BleResult.Failure(BleFailure.OperationCancelled);
            }
            catch (Exception e)
            {
                result = BleResult.Failure(e);
            }

            return(result);
        }
Пример #3
0
 public static IBleResult Failure(BleFailure failureCause, IBleResult nestedFailure)
 {
     return(new BleResultImpl(failureCause, null, nestedFailure));
 }