private IEnumerable<Event> Car(string name, Environment env, Resource gasStation, Container fuelPump) { /* * A car arrives at the gas station for refueling. * * It requests one of the gas station's fuel pumps and tries to get the * desired amount of gas from it. If the stations reservoir is * depleted, the car has to wait for the tank truck to arrive. */ var fuelTankLevel = env.RandUniform(MinFuelTankLevel, MaxFuelTankLevel + 1); env.Log("{0} arriving at gas station at {1}", name, env.Now); using (var req = gasStation.Request()) { var start = env.Now; // Request one of the gas pumps yield return req; // Get the required amount of fuel var litersRequired = FuelTankSize - fuelTankLevel; yield return fuelPump.Get(litersRequired); // The "actual" refueling process takes some time yield return env.Timeout(TimeSpan.FromSeconds(litersRequired / RefuelingSpeed)); env.Log("{0} finished refueling in {1} seconds.", name, (env.Now - start).TotalSeconds); } }
private IEnumerable<Event> CarGenerator(Environment env, Resource gasStation, Container fuelPump) { // Generate new cars that arrive at the gas station. var i = 0; while (true) { i++; yield return env.Timeout(env.RandUniform(MinTInter, MaxTInter)); env.Process(Car("Car " + i, env, gasStation, fuelPump)); } }