Example #1
0
        public async Task <IEnumerable <object> > GetEventStream <TAggregate, TId>(TId id) where TAggregate : Aggregate <TId>
        {
            var streamName = StreamName($"{typeof(TAggregate).Name }-{id}");

            var eventNumber = 0;
            StreamEventsSlice currentSlice;

            var eventStream = new List <object>();

            do
            {
                currentSlice = await _eventStoreConnection.ReadStreamEventsForwardAsync(streamName, eventNumber, ReadPageSize, false);

                // if (currentSlice.Status == SliceReadStatus.StreamNotFound)
                //     throw new AggregateNotFoundException(id, typeof(TAggregate));

                // if (currentSlice.Status == SliceReadStatus.StreamDeleted)
                //     throw new AggregateDeletedException(id, typeof(TAggregate));

                eventNumber = (int)currentSlice.NextEventNumber;

                foreach (var resolvedEvent in currentSlice.Events)
                {
                    eventStream.Add(_eventDeserializer.Deserialize(resolvedEvent.Event));
                }
            } while (!currentSlice.IsEndOfStream);

            return(eventStream);
        }
Example #2
0
        async Task EventAppeared(
            EventStoreCatchUpSubscription _,
            ResolvedEvent resolvedEvent)
        {
            if (resolvedEvent.Event.EventType.StartsWith("$"))
            {
                return;
            }

            var @event = _deserializer.Deserialize(resolvedEvent.Event);

            _logger.LogDebug($"Event appeared {@event}");

            await Task.WhenAll(_projections.Select(x => x.Project(@event)));
        }
        public async Task Subscribe(Type eventType, string subscription, Func <object, Task> eventHandler)
        {
            var eventTypeStream = $"$et-{eventType.Name}";
            var settings        = PersistentSubscriptionSettings.Create().ResolveLinkTos().StartFromCurrent();

            _logger.LogDebug($"Subscribing to {eventTypeStream} with {_credentials.Username}:{_credentials.Password}");

            await CreateSubscription(subscription, eventTypeStream, settings);

            await _conn.ConnectToPersistentSubscriptionAsync(
                eventTypeStream,
                subscription,
                (_, ev) =>
            {
                _logger.LogDebug($"Event Apperead {ev.Event}");
                eventHandler(_eventDeserializer.Deserialize(ev.Event));
            });
        }