public async Task <ISubscription> Subscribe(IEventHandlerFactory factory, object[] args = null)
        {
            Subscription s = new Subscription(true);

            var lastPosition = (StreamPosition)await _stream.LastPosition();

            string[]      prefixes = _events.Select(x => x.Name).ToArray();
            FilterOptions filters  = new FilterOptions(EventTypeFilter.Prefix(prefixes));

            // be very careful. We need to subscribe after the global position.

            await _eventStore.SubscribeToAllAsync(lastPosition.GlobalPosition,
                                                  async (s, r, c) =>
            {
                var type = _schema.EventByName(r.Event.EventType);
                if (type != null && _events.Contains(type))
                {
                    using (var scope = factory.Scope())
                    {
                        var handler = scope.CreateHandler(type);

                        var(m, e) = _eventConverter.Convert(type, r);

                        await handler.Execute(m, e);
                    }
                }
            }, true, null, filters);

            return(s);
        }
 protected override async Task Given()
 {
     await Client.CreateToAllAsync(
         Group,
         EventTypeFilter.Prefix("prefix-filter-"),
         new PersistentSubscriptionSettings(),
         TestCredentials.Root);
 }
        public async Task prefix_event_type()
        {
            const string eventTypePrefix = nameof(prefix_event_type);
            var          streamPrefix    = _fixture.GetStreamName();
            var          events          = _fixture.CreateTestEvents(10)
                                           .Select(e =>
                                                   new EventData(e.EventId, $"{eventTypePrefix}-{Guid.NewGuid():n}", e.Data, e.Metadata, e.ContentType))
                                           .ToArray();

            foreach (var e in events)
            {
                await _fixture.Client.AppendToStreamAsync($"{streamPrefix}_{Guid.NewGuid():n}",
                                                          AnyStreamRevision.NoStream, new[] { e });
            }

            var result = await _fixture.Client.ReadAllAsync(Direction.Backwards, Position.End, 20,
                                                            filterOptions : new FilterOptions(EventTypeFilter.Prefix(eventTypePrefix)))
                         .ToArrayAsync();

            Assert.Equal(events.Select(x => x.EventId), result.Reverse().Select(x => x.OriginalEvent.EventId));
        }
Exemplo n.º 4
0
 public async Task SubscribeAll_EventFilterPrefix()
 {
     var prefixEventFilter = new SubscriptionFilterOptions(EventTypeFilter.Prefix("test-"));
     await _client.SubscribeToAllAsync(SubscribeReturn,
                                       filterOptions : prefixEventFilter);
 }