protected override Task <ListStreamsPage> ListStreamsInternal(
            Pattern pattern,
            int maxCount,
            string continuationToken,
            ListNextStreamsPage listNextStreamsPage,
            CancellationToken cancellationToken)
        {
            Ensure.That(listNextStreamsPage).IsNotNull();
            int.TryParse(continuationToken, out var index);

            Func <string, bool> filter = default;

            switch (pattern)
            {
            case Pattern.Any _:
                filter = s => true;
                break;

            case Pattern.StartingWith p:
                filter = s => s?.StartsWith(p.Value) ?? false;
                break;

            case Pattern.EndingWith p:
                filter = s => s?.EndsWith(p.Value) ?? false;
                break;

            default:
                throw Pattern.Unrecognized(nameof(pattern));
            }

            using (_lock.UseReadLock())
            {
                var streamIds = _streamIds
                                .Skip(index)
                                .Where(filter)
                                .Take(maxCount)
                                .ToArray();

                var nextContinuationToken = streamIds.Length == 0
                    ? 0
                    : _streamIds.IndexOf(streamIds[streamIds.Length - 1]) + 1;

                return(Task.FromResult(new ListStreamsPage(
                                           nextContinuationToken.ToString(),
                                           streamIds,
                                           listNextStreamsPage)));
            }
        }
        protected override async Task <ListStreamsPage> ListStreamsInternal(
            Pattern pattern,
            int maxCount,
            string continuationToken,
            ListNextStreamsPage listNextStreamsPage,
            CancellationToken cancellationToken)
        {
            GuardAgainstDisposed();
            cancellationToken.ThrowIfCancellationRequested();

            using (var connection = OpenConnection())
            {
                var headers = await connection.AllStream()
                              .List(pattern, maxCount, continuationToken, cancellationToken);

                var token = headers.Any()
                    ? headers.Last().Key.ToString()
                    : Position.End.ToString();

                return(new ListStreamsPage(token,
                                           headers.Select(h => h.IdOriginal).ToArray(),
                                           listNextStreamsPage));
            }
        }
示例#3
0
 protected abstract Task <ListStreamsPage> ListStreamsInternal(
     Pattern pattern,
     int maxCount,
     string continuationToken,
     ListNextStreamsPage listNextStreamsPage,
     CancellationToken cancellationToken);