示例#1
0
        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;
            }
        }
示例#2
0
        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));
        }