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