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