Esempio n. 1
0
        public void DragonActor_CanIncreaseAndDecrease_Hunger_Baby()
        {
            // Create a dragon.
            var dragon = new Dragon("test");

            dragon.Age(LifeStage.Teen);

            // Create the life metric processor.
            var lifeMetricProcessor = new LifeMetricProcessor(dragon);

            var dragonActorRef = Sys.ActorOf(Props.Create(() => new DragonActor(lifeMetricProcessor)));

            // Starve the dragon a bit so that it's hunger increases.
            dragonActorRef.Tell(new StarveDragon(dragon));
            dragonActorRef.Tell(new StarveDragon(dragon));
            dragonActorRef.Tell(new StarveDragon(dragon));
            dragonActorRef.Tell(new StarveDragon(dragon));
            ExpectNoMsg();
            Assert.Equal(20, dragon.Hunger);

            // Feed the dragon so that it's hunger decreases.
            dragonActorRef.Tell(new FeedDragon(dragon));
            ExpectNoMsg();
            Assert.Equal(5, dragon.Hunger);
        }
Esempio n. 2
0
        public DragonActor(LifeMetricProcessor lifeMetricProcessor)
        {
            Receive <FeedDragon>(e =>
            {
                lifeMetricProcessor.Feed();
            });

            Receive <StarveDragon>(e =>
            {
                lifeMetricProcessor.Starve();
            });

            Receive <PetDragon>(e =>
            {
                lifeMetricProcessor.Pet();
            });

            Receive <IgnoreDragon>(e =>
            {
                lifeMetricProcessor.Ignore();
            });

            Receive <HealthCheck>(e =>
            {
                var healthReport = new HealthReport
                {
                    Message = e.Dragon.ToString()
                };

                if (e.Dragon.Happiness <= 0)
                {
                    healthReport.Alive   = false;
                    healthReport.Message = $"{e.Dragon.Name} died of loneliness.";
                    Sender.Tell(healthReport);

                    return;
                }

                if (e.Dragon.Hunger >= Dragon.MaximumHunger)
                {
                    healthReport.Alive   = false;
                    healthReport.Message = $"{e.Dragon.Name} died of hunger.";
                    Sender.Tell(healthReport);

                    return;
                }

                e.Dragon.GrowOlder();

                Sender.Tell(healthReport);
            });
        }
Esempio n. 3
0
        public void Dragon_CanDieOf_Loneliness()
        {
            // Create a dragon.
            var dragon = new Dragon("test");

            // Create the life metric processor.
            var lifeMetricProcessor = new LifeMetricProcessor(dragon);

            var dragonActor = Sys.ActorOf(Props.Create(() => new DragonActor(lifeMetricProcessor)));

            // Ignore the dragon until it dies of loneliness.
            dragon.DecreaseHappiness(100);

            // Do a health check on the dragon.
            dragonActor.Tell(new HealthCheck(dragon));
            Assert.False(ExpectMsg <HealthReport>().Alive);
        }
        public void DragonActor_CanIncreaseAndDecrease_Happiness_Baby()
        {
            // Create a dragon.
            var dragon = new Dragon("test");

            // Create the life metric processor.
            var lifeMetricProcessor = new LifeMetricProcessor(dragon);

            var dragonActorRef = Sys.ActorOf(Props.Create(() => new DragonActor(lifeMetricProcessor)));

            // Ignore the dragon so that happiness decreases.
            dragonActorRef.Tell(new IgnoreDragon(dragon));
            ExpectNoMsg();
            Assert.Equal(95, dragon.Happiness);

            // Pet the dragon so that it's happiness increases.
            dragonActorRef.Tell(new PetDragon(dragon));
            ExpectNoMsg();
            Assert.Equal(100, dragon.Happiness);

            Sys.Terminate();
        }
Esempio n. 5
0
        public void Dragon_CanDie_ViaLifeActor()
        {
            // Create a dragon.
            var dragon = new Dragon("test");

            // Create the life metric processor.
            var lifeMetricProcessor = new LifeMetricProcessor(dragon);

            var dragonActor = Sys.ActorOf(Props.Create(() => new DragonActor(lifeMetricProcessor)));
            var lifeActor   = Sys.ActorOf(Props.Create(() => new LifeActor(dragonActor)));

            // Starve the dragon until it dies of hunger.
            dragon.IncreaseHunger(100);

            // Do a health check on the dragon.
            lifeActor.Tell(new HealthCheck(dragon));

            Watch(lifeActor);
            ExpectMsg <Terminated>(TimeSpan.FromSeconds(5));
            Watch(dragonActor);
            ExpectMsg <Terminated>(TimeSpan.FromSeconds(5));
        }