Ejemplo n.º 1
0
        public IObservable <OccuredEvent> Start(long?position)
        {
            long ordinal = position ?? 0;

            running = true;

            return(Observable.Create <OccuredEvent>(async observer =>
            {
                while (running)
                {
                    int count = 0;
                    var work = false;

                    await repo.EnumerateStartingAfter(ordinal, commit =>
                    {
                        ordinal = commit.Ordinal;
                        foreach (IEvent @event in mapper.ExtractEvents(commit))
                        {
                            work = true;
                            var dto = new OccuredEvent(@event.Headers.GetLong(EventHeaderKeys.CommitId), @event);
                            observer.OnNext(dto);
                            count++;
                        }
                    });

                    LogProcessedEvents(count);

                    await Delay(work);
                }

                observer.OnCompleted();
            }));
        }
Ejemplo n.º 2
0
        public async IAsyncEnumerable <OccuredEvent> Start(long?position) //TODO Check Callers!
        {
            long ordinal = position ?? 0;

            running = true;
            while (running)
            {
                int count = 0;
                var work  = false;

                await foreach (var commit in repo.EnumerateStartingAfter(ordinal))
                {
                    ordinal = commit.Ordinal;
                    foreach (IEvent @event in mapper.ExtractEvents(commit))
                    {
                        work = true;
                        var dto = new OccuredEvent(@event.Headers.GetLong(EventHeaderKeys.CommitId), @event);
                        yield return(dto);

                        count++;
                    }

                    LogProcessedEvents(count);

                    await Delay(work);
                }
            }
        }
        protected override IObservable <IEvent> ReadEvents(string streamName, ISet <Type> eventTypes, CancellationToken token)
        {
            string id   = namer.IdByStreamName(streamName);
            string type = namer.TypeNameByStreamName(streamName);

            return(Observable.Create <IEvent>(async observer =>
            {
                await repository.EnumerateCommits(type, id, eventTypes,
                                                  x =>
                {
                    IEnumerable <IEvent> events = mapper.ExtractEvents(x);

                    foreach (IEvent @event in events)
                    {
                        observer.OnNext(@event);
                    }
                }, observer.OnCompleted);
                return () =>
                {
                };
            }));
        }