Exemplo n.º 1
0
 public async IAsyncEnumerable <DescribedEvent> EnumerateDescribed(EnumerateDirection direction, int limit,
                                                                   [EnumeratorCancellation] CancellationToken token)
 {
     await foreach (var entry in Enumerate(direction, limit, token))
     {
         var item = DescribeEvent(entry);
         yield return(item);
     }
 }
Exemplo n.º 2
0
        public IAsyncEnumerable <EventCommit> EnumerateCommits(string type, string id, long maxversion,
                                                               EnumerateDirection direction = EnumerateDirection.Ascending, int?limit = null,
                                                               CancellationToken token      = default)
        {
            FilterDefinition <EventCommit> query = Filters.And(CommitFilters.ByAggregate(type, id),
                                                               Filters.Lte(x => x.VersionEvents, maxversion));

            return(Enumerate(query, direction, limit, token));
        }
Exemplo n.º 3
0
        private async IAsyncEnumerable <EventCommit> Enumerate(FilterDefinition <EventCommit> query,
                                                               EnumerateDirection direction, int?limit,
                                                               [EnumeratorCancellation] CancellationToken token)
        {
            FindOptions options;

            if (DeactivateTimeoutOnRead)
            {
                options = new FindOptions()
                {
                    NoCursorTimeout = true,
                    MaxTime         = TimeSpan.MaxValue,
                    MaxAwaitTime    = TimeSpan.MaxValue,
                };
            }
            else
            {
                options = new FindOptions();
            }

            SortDefinition <EventCommit> sort;

            if (direction == EnumerateDirection.Ascending)
            {
                sort = Sorts.Ascending(x => x.Ordinal);
            }
            else
            {
                sort = Sorts.Descending(x => x.Ordinal);
            }

            var find = Collection
                       .Find(query, options)
                       .Sort(sort);


            if (limit.HasValue && limit > 0)
            {
                find = find.Limit(limit);
            }

            IAsyncCursor <EventCommit> cursor = await find
                                                .ToCursorAsync(token);

            while (await cursor.MoveNextAsync(token) && !token.IsCancellationRequested)
            {
                foreach (EventCommit item in cursor.Current)
                {
                    token.ThrowIfCancellationRequested();
                    yield return(item);
                }
            }
        }
Exemplo n.º 4
0
 public abstract IAsyncEnumerable <IEvent> Enumerate(EnumerateDirection direction, int limit,
                                                     CancellationToken token);
Exemplo n.º 5
0
 public IAsyncEnumerable <EventCommit> EnumerateAllCommits(
     EnumerateDirection direction = EnumerateDirection.Ascending, int?limit = null,
     CancellationToken token      = default)
 {
     return(Enumerate(CommitFilters.All, direction, limit, token));
 }
Exemplo n.º 6
0
 public override IAsyncEnumerable <IEvent> Enumerate(EnumerateDirection direction, int limit,
                                                     CancellationToken token)
 {
     throw new NotImplementedException();
 }