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); }
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)); }); }