How to use ReadHopperLevelEvent class of Microsoft.Coyote.Samples.CoffeeMachineActors package

Best Coyote code snippet using Microsoft.Coyote.Samples.CoffeeMachineActors.ReadHopperLevelEvent

CoffeeMachine.cs

Source:CoffeeMachine.cs Github

copy

Full Screen

...86 this.SendEvent(this.WaterTank, new WaterHeaterButtonEvent(false));87 // Need to check water and hopper levels and if the porta filter has88 // coffee in it we need to dump those grinds.89 this.SendEvent(this.WaterTank, new ReadWaterLevelEvent());90 this.SendEvent(this.CoffeeGrinder, new ReadHopperLevelEvent());91 this.SendEvent(this.DoorSensor, new ReadDoorOpenEvent());92 this.SendEvent(this.CoffeeGrinder, new ReadPortaFilterCoffeeLevelEvent());93 }94 private void OnWaterLevel(Event e)95 {96 var evt = e as WaterLevelEvent;97 this.WaterLevel = evt.WaterLevel;98 this.Log.WriteLine("Water level is {0} %", (int)this.WaterLevel.Value);99 if ((int)this.WaterLevel.Value <= 0)100 {101 this.Log.WriteLine("Coffee machine is out of water");102 this.RaiseGotoStateEvent<RefillRequired>();103 return;104 }105 this.CheckInitialState();106 }107 private void OnHopperLevel(Event e)108 {109 var evt = e as HopperLevelEvent;110 this.HopperLevel = evt.HopperLevel;111 this.Log.WriteLine("Hopper level is {0} %", (int)this.HopperLevel.Value);112 if ((int)this.HopperLevel.Value == 0)113 {114 this.Log.WriteError("Coffee machine is out of coffee beans");115 this.RaiseGotoStateEvent<RefillRequired>();116 return;117 }118 this.CheckInitialState();119 }120 private void OnDoorOpen(Event e)121 {122 var evt = e as DoorOpenEvent;123 this.DoorOpen = evt.Open;124 if (this.DoorOpen.Value != false)125 {126 this.Log.WriteError("Cannot safely operate coffee machine with the door open!");127 this.RaiseGotoStateEvent<Error>();128 return;129 }130 this.CheckInitialState();131 }132 private void OnPortaFilterCoffeeLevel(Event e)133 {134 var evt = e as PortaFilterCoffeeLevelEvent;135 this.PortaFilterCoffeeLevel = evt.CoffeeLevel;136 if (evt.CoffeeLevel > 0)137 {138 // Dump these grinds because they could be old, we have no idea how long139 // the coffee machine was off (no real time clock sensor).140 this.Log.WriteLine("Dumping old smelly grinds!");141 this.SendEvent(this.CoffeeGrinder, new DumpGrindsButtonEvent(true));142 }143 this.CheckInitialState();144 }145 private void CheckInitialState()146 {147 if (this.WaterLevel.HasValue && this.HopperLevel.HasValue &&148 this.DoorOpen.HasValue && this.PortaFilterCoffeeLevel.HasValue)149 {150 this.RaiseGotoStateEvent<HeatingWater>();151 }152 }153 [OnEntry(nameof(OnStartHeating))]154 [DeferEvents(typeof(MakeCoffeeEvent))]155 [OnEventDoAction(typeof(WaterTemperatureEvent), nameof(MonitorWaterTemperature))]156 [OnEventDoAction(typeof(WaterHotEvent), nameof(OnWaterHot))]157 private class HeatingWater : State { }158 private void OnStartHeating()159 {160 // Start heater and keep monitoring the water temp till it reaches 100!161 this.Log.WriteLine("Warming the water to 100 degrees");162 this.Monitor<LivenessMonitor>(new LivenessMonitor.BusyEvent());163 this.SendEvent(this.WaterTank, new ReadWaterTemperatureEvent());164 }165 private void OnWaterHot()166 {167 this.Log.WriteLine("Coffee machine water temperature is now 100");168 if (this.Heating)169 {170 this.Heating = false;171 // Turn off the heater so we don't overheat it!172 this.Log.WriteLine("Turning off the water heater");173 this.SendEvent(this.WaterTank, new WaterHeaterButtonEvent(false));174 }175 this.RaiseGotoStateEvent<Ready>();176 }177 private void MonitorWaterTemperature(Event e)178 {179 var evt = e as WaterTemperatureEvent;180 this.WaterTemperature = evt.WaterTemperature;181 if (this.WaterTemperature.Value >= 100)182 {183 this.OnWaterHot();184 }185 else186 {187 if (!this.Heating)188 {189 this.Heating = true;190 // Turn on the heater and wait for WaterHotEvent.191 this.Log.WriteLine("Turning on the water heater");192 this.SendEvent(this.WaterTank, new WaterHeaterButtonEvent(true));193 }194 }195 this.Log.WriteLine("Coffee machine is warming up ({0} degrees)...", (int)this.WaterTemperature);196 }197 [OnEntry(nameof(OnReady))]198 [IgnoreEvents(typeof(WaterLevelEvent), typeof(WaterHotEvent), typeof(HopperLevelEvent))]199 [OnEventGotoState(typeof(MakeCoffeeEvent), typeof(MakingCoffee))]200 [OnEventDoAction(typeof(HopperEmptyEvent), nameof(OnHopperEmpty))]201 private class Ready : State { }202 private void OnReady()203 {204 this.Monitor<LivenessMonitor>(new LivenessMonitor.IdleEvent());205 this.Log.WriteLine("Coffee machine is ready to make coffee (green light is on)");206 }207 [OnEntry(nameof(OnMakeCoffee))]208 private class MakingCoffee : State { }209 private void OnMakeCoffee(Event e)210 {211 var evt = e as MakeCoffeeEvent;212 this.Monitor<LivenessMonitor>(new LivenessMonitor.BusyEvent());213 this.Log.WriteLine($"Coffee requested, shots={evt.Shots}");214 this.ShotsRequested = evt.Shots;215 // First we assume user placed a new cup in the machine, and so the shot count is zero.216 this.PreviousShotCount = 0;217 // Grind beans until porta filter is full. Turn on shot button for desired time dump the218 // grinds, while checking for error conditions, e.g. out of water or coffee beans.219 this.RaiseGotoStateEvent<GrindingBeans>();220 }221 [OnEntry(nameof(OnGrindingBeans))]222 [OnEventDoAction(typeof(PortaFilterCoffeeLevelEvent), nameof(MonitorPortaFilter))]223 [OnEventDoAction(typeof(HopperLevelEvent), nameof(MonitorHopperLevel))]224 [OnEventDoAction(typeof(HopperEmptyEvent), nameof(OnHopperEmpty))]225 [IgnoreEvents(typeof(WaterHotEvent))]226 private class GrindingBeans : State { }227 private void OnGrindingBeans()228 {229 // Grind beans until porta filter is full.230 this.Log.WriteLine("Grinding beans...");231 // Turn on the grinder!232 this.SendEvent(this.CoffeeGrinder, new GrinderButtonEvent(true));233 // And keep monitoring the porta filter till it is full, and the bean level in case we get empty.234 this.SendEvent(this.CoffeeGrinder, new ReadHopperLevelEvent());235 }236 private void MonitorPortaFilter(Event e)237 {238 var evt = e as PortaFilterCoffeeLevelEvent;239 if (evt.CoffeeLevel >= 100)240 {241 this.Log.WriteLine("PortaFilter is full");242 this.SendEvent(this.CoffeeGrinder, new GrinderButtonEvent(false));243 this.RaiseGotoStateEvent<MakingShots>();244 }245 else246 {247 if (evt.CoffeeLevel != this.PreviousCoffeeLevel)248 {249 this.PreviousCoffeeLevel = evt.CoffeeLevel;250 this.Log.WriteLine("PortaFilter is {0} % full", evt.CoffeeLevel);251 }252 }253 }254 private void MonitorHopperLevel(Event e)255 {256 var evt = e as HopperLevelEvent;257 if (evt.HopperLevel == 0)258 {259 this.OnHopperEmpty();260 }261 else262 {263 this.SendEvent(this.CoffeeGrinder, new ReadHopperLevelEvent());264 }265 }266 private void OnHopperEmpty()267 {268 this.Log.WriteError("hopper is empty!");269 this.SendEvent(this.CoffeeGrinder, new GrinderButtonEvent(false));270 this.RaiseGotoStateEvent<RefillRequired>();271 }272 [OnEntry(nameof(OnMakingShots))]273 [OnEventDoAction(typeof(WaterLevelEvent), nameof(OnMonitorWaterLevel))]274 [OnEventDoAction(typeof(ShotCompleteEvent), nameof(OnShotComplete))]275 [OnEventDoAction(typeof(WaterEmptyEvent), nameof(OnWaterEmpty))]276 [IgnoreEvents(typeof(WaterHotEvent), typeof(HopperLevelEvent), typeof(HopperEmptyEvent))]277 private class MakingShots : State { }...

Full Screen

Full Screen

MockSensors.cs

Source:MockSensors.cs Github

copy

Full Screen

...242 /// coffee before pouring a shot.243 /// </summary>244 [OnEventDoAction(typeof(RegisterClientEvent), nameof(OnRegisterClient))]245 [OnEventDoAction(typeof(ReadPortaFilterCoffeeLevelEvent), nameof(OnReadPortaFilterCoffeeLevel))]246 [OnEventDoAction(typeof(ReadHopperLevelEvent), nameof(OnReadHopperLevel))]247 [OnEventDoAction(typeof(GrinderButtonEvent), nameof(OnGrinderButton))]248 [OnEventDoAction(typeof(GrinderTimerEvent), nameof(MonitorGrinder))]249 [OnEventDoAction(typeof(DumpGrindsButtonEvent), nameof(OnDumpGrindsButton))]250 internal class MockCoffeeGrinder : Actor251 {252 private ActorId Client;253 private bool RunSlowly;254 private double PortaFilterCoffeeLevel;255 private double HopperLevel;256 private bool GrinderButton;257 private TimerInfo GrinderTimer;258 private readonly LogWriter Log = LogWriter.Instance;259 internal class GrinderTimerEvent : TimerElapsedEvent260 {...

Full Screen

Full Screen

SensorEvents.cs

Source:SensorEvents.cs Github

copy

Full Screen

...39 /// Read the current water level, returns a WaterLevelEvent to the caller.40 /// </summary>41 internal class ReadWaterLevelEvent : Event { }42 /// <summary>43 /// Result from ReadHopperLevelEvent, caller cannot set the hopper level.44 /// </summary>45 internal class HopperLevelEvent : Event46 {47 // Starts at 100% full of beans, and drops when grinder is on.48 public double HopperLevel;49 public HopperLevelEvent(double value) { this.HopperLevel = value; }50 }51 /// <summary>52 /// Read the current coffee level in the hopper. Returns a HopperLevelEvent to the caller.53 /// </summary>54 internal class ReadHopperLevelEvent : Event { }55 /// <summary>56 /// Event is returned from ReadWaterTemperatureEvent, cannot set this value.57 /// </summary>58 internal class WaterTemperatureEvent : Event59 {60 // Starts at room temp, heats up to 100 when water heater is on.61 public double WaterTemperature;62 public WaterTemperatureEvent(double value) { this.WaterTemperature = value; }63 }64 /// <summary>65 /// Read the current water temperature. Returns a WaterTemperatureEvent to the caller.66 /// </summary>67 internal class ReadWaterTemperatureEvent : Event { }68 /// <summary>...

Full Screen

Full Screen

ReadHopperLevelEvent

Using AI Code Generation

copy

Full Screen

1using Microsoft.Coyote.Samples.CoffeeMachineActors;2using Microsoft.Coyote.Samples.CoffeeMachineActors;3using Microsoft.Coyote.Samples.CoffeeMachineActors;4using Microsoft.Coyote.Samples.CoffeeMachineActors;5using Microsoft.Coyote.Samples.CoffeeMachineActors;6using Microsoft.Coyote.Samples.CoffeeMachineActors;7using Microsoft.Coyote.Samples.CoffeeMachineActors;8using Microsoft.Coyote.Samples.CoffeeMachineActors;9using Microsoft.Coyote.Samples.CoffeeMachineActors;10using Microsoft.Coyote.Samples.CoffeeMachineActors;11using Microsoft.Coyote.Samples.CoffeeMachineActors;12using Microsoft.Coyote.Samples.CoffeeMachineActors;13using Microsoft.Coyote.Samples.CoffeeMachineActors;14using Microsoft.Coyote.Samples.CoffeeMachineActors;

Full Screen

Full Screen

ReadHopperLevelEvent

Using AI Code Generation

copy

Full Screen

1using System;2using System.Threading.Tasks;3using Microsoft.Coyote;4using Microsoft.Coyote.Actors;5using Microsoft.Coyote.Samples.CoffeeMachineActors;6{7 {8 static void Main(string[] args)9 {10 Task.Run(async () => await RunAsync());11 Console.ReadLine();12 }13 static async Task RunAsync()14 {15 Console.WriteLine("Starting program...");16 Console.WriteLine("Press enter to stop the program");17 using (var runtime = RuntimeFactory.Create())18 {19 var coffeeMachine = runtime.CreateActor(typeof(CoffeeMachine));20 var hopperLevel = await runtime.SendEventAndExecuteTask<int>(coffeeMachine, new ReadHopperLevelEvent());21 Console.WriteLine($"Hopper level is {hopperLevel}");22 }23 }24 }25}26using System;27using System.Threading.Tasks;28using Microsoft.Coyote;29using Microsoft.Coyote.Actors;30using Microsoft.Coyote.Samples.CoffeeMachineActors;31{32 {33 static void Main(string[] args)34 {35 Task.Run(async () => await RunAsync());36 Console.ReadLine();37 }38 static async Task RunAsync()39 {40 Console.WriteLine("Starting program...");41 Console.WriteLine("Press enter to stop the program");42 using (var runtime = RuntimeFactory.Create())43 {44 var coffeeMachine = runtime.CreateActor(typeof(CoffeeMachine));45 var hopperLevel = await runtime.SendEventAndExecuteTask<int>(coffeeMachine, new ReadHopperLevelEvent());46 Console.WriteLine($"Hopper level is {hopperLevel}");47 }48 }49 }50}51using System;52using System.Threading.Tasks;53using Microsoft.Coyote;54using Microsoft.Coyote.Actors;55using Microsoft.Coyote.Samples.CoffeeMachineActors;56{57 {58 static void Main(string[] args)59 {

Full Screen

Full Screen

ReadHopperLevelEvent

Using AI Code Generation

copy

Full Screen

1using Microsoft.Coyote.Samples.CoffeeMachineActors;2using System;3using System.Threading.Tasks;4{5 {6 static void Main(string[] args)7 {8 Console.WriteLine("Hello World!");9 }10 }11}12using Microsoft.Coyote.Samples.CoffeeMachineActors;13using System;14using System.Threading.Tasks;15{16 {17 static void Main(string[] args)18 {19 Console.WriteLine("Hello World!");20 }21 }22}23using Microsoft.Coyote.Samples.CoffeeMachineActors;24using System;25using System.Threading.Tasks;26{27 {28 static void Main(string[] args)29 {30 Console.WriteLine("Hello World!");31 }32 }33}34using Microsoft.Coyote.Samples.CoffeeMachineActors;35using System;36using System.Threading.Tasks;37{38 {39 static void Main(string[] args)40 {41 Console.WriteLine("Hello World!");42 }43 }44}45using Microsoft.Coyote.Samples.CoffeeMachineActors;46using System;47using System.Threading.Tasks;48{49 {50 static void Main(string[] args)51 {52 Console.WriteLine("Hello World!");53 }54 }55}56using Microsoft.Coyote.Samples.CoffeeMachineActors;57using System;58using System.Threading.Tasks;59{60 {61 static void Main(string[] args)62 {63 Console.WriteLine("Hello World!");64 }65 }66}

Full Screen

Full Screen

ReadHopperLevelEvent

Using AI Code Generation

copy

Full Screen

1using Microsoft.Coyote.Samples.CoffeeMachineActors;2using System;3using System.Threading.Tasks;4using Microsoft.Coyote.Actors;5{6 {7 static void Main(string[] args)8 {9 var runtime = RuntimeFactory.Create();10 var machine = runtime.CreateActor(typeof(CoffeeMachine));11 runtime.SendEvent(machine, new ReadHopperLevelEvent());12 Console.ReadLine();13 }14 }15}16using Microsoft.Coyote.Samples.CoffeeMachineActors;17using System;18using System.Threading.Tasks;19using Microsoft.Coyote.Actors;20{21 {22 static void Main(string[] args)23 {24 var runtime = RuntimeFactory.Create();25 var machine = runtime.CreateActor(typeof(CoffeeMachine));26 runtime.SendEvent(machine, new ReadHopperLevelEvent());27 Console.ReadLine();28 }29 }30}

Full Screen

Full Screen

ReadHopperLevelEvent

Using AI Code Generation

copy

Full Screen

1using Microsoft.Coyote.Samples.CoffeeMachineActors;2{3 {4 public int CurrentHopperLevel { get; set; }5 public ReadHopperLevelEvent() : base() { }6 public ReadHopperLevelEvent(int currentHopperLevel) : base()7 {8 this.CurrentHopperLevel = currentHopperLevel;9 }10 }11}12using Microsoft.Coyote.Samples.CoffeeMachineActors;13using Microsoft.Coyote.Samples.CoffeeMachineActors.Interfaces;14{15 {16 private readonly int hopperCapacity = 500;17 private int currentHopperLevel = 0;18 private bool isHopperEmpty = false;19 private bool isHopperFull = false;20 private bool isBrewing = false;21 private bool isCleaning = false;22 private bool isBrewingComplete = false;23 private bool isCleaningComplete = false;24 private bool isBrewingCancelled = false;25 private bool isCleaningCancelled = false;26 private bool isBrewingInterrupted = false;27 private bool isCleaningInterrupted = false;28 private bool isBrewingTimeout = false;29 private bool isCleaningTimeout = false;30 private bool isBrewingFaulted = false;31 private bool isCleaningFaulted = false;32 public CoffeeMachineActor() : base() { }33 [OnEntry(nameof(InitializeState))]34 [OnEventDoAction(typeof(ReadHopperLevelEvent), nameof(ReadHopperLevel))]35 [OnEventDoAction(typeof(AddCoffeeEvent), nameof(AddCoffee))]36 [OnEventDoAction(typeof(BrewCoffeeEvent), nameof(BrewCoffee))]37 [OnEventDoAction(typeof(CancelBrewingEvent), nameof(CancelBrewing))]38 [OnEventDoAction(typeof(CleanCoffeeMachineEvent), nameof(CleanCoffeeMachine))]39 [OnEventDoAction(typeof(CancelCleaningEvent), nameof(CancelCleaning))]40 [OnEventDoAction(typeof(InterruptBrew

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run Coyote automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful