Example #1
0
        public EventConsumerManagerTests()
        {
            A.CallTo(() => consumer1.Name).Returns(consumerName1);
            A.CallTo(() => consumer2.Name).Returns(consumerName2);

            A.CallTo(() => factory.GetDetachedAsync <EventConsumerGrain, EventConsumerState>(consumerName1)).Returns(actor1);
            A.CallTo(() => factory.GetDetachedAsync <EventConsumerGrain, EventConsumerState>(consumerName2)).Returns(actor2);

            sut = new EventConsumerGrainManager(new IEventConsumer[] { consumer1, consumer2 }, pubSub, factory);
        }
Example #2
0
        public void Connect()
        {
            var actors = new Dictionary <string, EventConsumerGrain>();

            foreach (var consumer in consumers)
            {
                var actor = factory.GetDetachedAsync <EventConsumerGrain, EventConsumerState>(consumer.Name).Result;

                actors[consumer.Name] = actor;
                actor.Activate(consumer);
            }

            subscriptions.Add(pubSub.Subscribe <StartConsumerMessage>(m =>
            {
                if (actors.TryGetValue(m.ConsumerName, out var actor))
                {
                    actor.Start();
                }
            }));

            subscriptions.Add(pubSub.Subscribe <StopConsumerMessage>(m =>
            {
                if (actors.TryGetValue(m.ConsumerName, out var actor))
                {
                    actor.Stop();
                }
            }));

            subscriptions.Add(pubSub.Subscribe <ResetConsumerMessage>(m =>
            {
                if (actors.TryGetValue(m.ConsumerName, out var actor))
                {
                    actor.Reset();
                }
            }));

            subscriptions.Add(pubSub.ReceiveAsync <GetStatesRequest, GetStatesResponse>(request =>
            {
                var states = actors.Values.Select(x => x.GetState()).ToArray();

                return(Task.FromResult(new GetStatesResponse {
                    States = states
                }));
            }));
        }