} // end of #endregion #region Initialize /// <summary> /// Arrival stream of clients is initialized /// </summary> /// <param name="startTime">Start time of simulation</param> /// <param name="simEngine">End time of simulation</param> protected override void CustomInitialize(DateTime startTime, ISimulationEngine simEngine) { EntityClient nextClient = new EntityClient(); EventClientArrival nextClientArrival = new EventClientArrival(this, nextClient); double arrivalTimeMinutes = ((SimulationModelQueuing)ParentSimulationModel).ArrivalTime; simEngine.AddScheduledEvent(nextClientArrival, startTime + TimeSpan.FromMinutes(Distributions.Instance.Exponential(arrivalTimeMinutes))); } // end of CustomInitialize
} // end of Event #endregion //-------------------------------------------------------------------------------------------------- // State Change //-------------------------------------------------------------------------------------------------- #region StateChange /// <summary> /// Overriden state change of the event. Request for service is made, next client arrival is scheduled /// </summary> /// <param name="time">Time the client arrives</param> /// <param name="simEngine">SimEngine responsible for simulation execution</param> protected override void StateChange(DateTime time, ISimulationEngine simEngine) { // next arrival is scheduled EntityClient nextClient = new EntityClient(); EventClientArrival nextClientArrival = new EventClientArrival(ParentControlUnit, nextClient); double arrivalTimeMinutes = ((SimulationModelQueuing)ParentControlUnit.ParentSimulationModel).ArrivalTime; simEngine.AddScheduledEvent(nextClientArrival, time + TimeSpan.FromMinutes(Distributions.Instance.Exponential(arrivalTimeMinutes))); ParentControlUnit.AddRequest(new RequestQueing("WaitInQueue", Client, time)); } // end of Trigger