/// <summary> /// Basic Construcor /// </summary> /// <param name="parentControlUnit">Parent control</param> /// <param name="client">Client to be served</param> /// <param name="server">Server performing service</param> public ActivityGetServed(ControlUnit parentControlUnit, EntityClient client, EntityServer server) : base(parentControlUnit, "ActivityGetServed", true) { _client = client; _server = server; } // end of Activity
} // 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
/// <summary> /// Basic constructor /// </summary> /// <param name="type">Type of request, eiter "WaitInQueue" or "GetServed"</param> /// <param name="client">Client filing request</param> /// <param name="time">Time the request is filed</param> public RequestQueing(string type, EntityClient client, DateTime time) : base(type, client.ToArray(), time) { _client = client; } // end of RequestBeAbsent
/// <summary> /// Basic constructor /// </summary> /// <param name="parentControlUnit">Parent control</param> /// <param name="patient">Client that arrives</param> public EventClientArrival(ControlUnit parentControlUnit, EntityClient client) : base(EventType.Standalone, parentControlUnit) { _client = client; } // end of Event