public async Task CanSubscribeToAllStreams() { var receivedMessagesCount = 0; var subscriptionDropped = false; var streamStore = new InMemoryStreamStore(); var stream1 = new StreamId("test1"); var stream2 = new StreamId("test2"); streamStore.SubscribeToAll(null, AllStreamMessageReceived, AllSubscriptionDropped); var message1 = new NewStreamMessage(Guid.NewGuid(), "Test1", @"{ 'Hello': 'World1' }"); await streamStore.AppendToStream(stream1, ExpectedVersion.Any, message1); var message2 = new NewStreamMessage(Guid.NewGuid(), "Test2", @"{ 'Hello': 'World2' }"); await streamStore.AppendToStream(stream2, ExpectedVersion.Any, message2); Thread.Sleep(100); Assert.Equal(2, receivedMessagesCount); Assert.False(subscriptionDropped); async Task AllStreamMessageReceived(IAllStreamSubscription subscription, StreamMessage streamMessage, CancellationToken cancellationToken) { if (receivedMessagesCount == 0) { Assert.Equal("Test1", streamMessage.Type); } if (receivedMessagesCount == 1) { Assert.Equal("Test2", streamMessage.Type); } receivedMessagesCount++; } void AllSubscriptionDropped(IAllStreamSubscription subscription, SubscriptionDroppedReason reason, Exception exception = null) { subscriptionDropped = true; } }
private Task <IDisposable> CreateSubscription( AllStreamPosition fromPosition, MessageReceived onMessage, LocalProjections.HasCaughtUp hasCaughtUp, Func <Exception, Task> onSubscriptionError) { SqlStreamStore.Subscriptions.AllStreamMessageReceived receivedHandler = (s, m) => onMessage(s, new Envelope(new AllStreamPosition(m.Position), m), CancellationToken.None); SqlStreamStore.Subscriptions.AllSubscriptionDropped subscriptionDroppedHandler = (s, r, e) => (r != SubscriptionDroppedReason.Disposed ? onSubscriptionError(e) : Task.CompletedTask) .GetAwaiter().GetResult(); SqlStreamStore.Subscriptions.HasCaughtUp caughtUpHandler = caughtUp => (caughtUp == true ? hasCaughtUp() : Task.CompletedTask).GetAwaiter().GetResult(); var subscription = EventStore.SubscribeToAll( fromPosition.ToNullableInt64(), receivedHandler, subscriptionDroppedHandler, caughtUpHandler); return(Task.FromResult <IDisposable>(subscription)); }