예제 #1
0
 public LifeCycleTest2Actor(ActorRef testActor, string id, AtomicInteger generationProvider)
 {
     this.testActor = testActor;
     this.id = id;
     this.generationProvider = generationProvider;
     this.CurrentGeneration = generationProvider.GetAndIncrement();
 }
        public void Scatter_gather_router_must_deliver_a_broadcast_message_using_tell()
        {
            var doneLatch = new TestLatch(sys, 2);
            var counter1 = new AtomicInteger(0);
            var counter2 = new AtomicInteger(0);
            var actor1 = sys.ActorOf(Props.Create(() => new BroadcastTarget(doneLatch, counter1)));
            var actor2 = sys.ActorOf(Props.Create(() => new BroadcastTarget(doneLatch, counter2)));

            var routedActor = sys.ActorOf(Props.Create<TestActor>().WithRouter(new ScatterGatherFirstCompletedGroup(TimeSpan.FromSeconds(1), actor1.Path.ToString(), actor2.Path.ToString())));
            routedActor.Tell(new Broadcast(1));
            routedActor.Tell(new Broadcast("end"));

            doneLatch.Ready(TimeSpan.FromSeconds(1));

            counter1.Value.ShouldBe(1);
            counter2.Value.ShouldBe(1);

        }
 public BroadcastTarget(TestLatch latch, AtomicInteger counter)
 {
     _latch = latch;
     _counter = counter;
 }
예제 #4
0
        public void ActorLifecycleTest3()
        {
            var generationProvider = new AtomicInteger();
            string id = Guid.NewGuid().ToString();            
            var supervisor = sys.ActorOf(Props.Create(() => new Supervisor(new OneForOneStrategy(3, TimeSpan.FromSeconds(1000), x => Directive.Restart))));
            var restarterProps = Props.Create(() => new LifeCycleTest2Actor(testActor, id, generationProvider));
            var restarter = supervisor.Ask<InternalActorRef>(restarterProps).Result;

            expectMsg(Tuple.Create("preStart", id, 0));
            restarter.Tell("status");
            expectMsg(Tuple.Create("OK", id, 0));
            restarter.Stop();
            expectMsg(Tuple.Create("postStop", id, 0));
            expectNoMsg(TimeSpan.FromSeconds(1));
        }