package mv3302; import simkit.SimEntityBase; import simkit.random.RandomVariate; /** * A simple (yet useful) simulation component that schedules Arrival events * using a <code>RandomVariate</code> instance for the times between Arrival * events.<br> * The state <code>numberArrivals></code> is incremented at each Arrival event. * * @author ahbuss */ public class ArrivalProcess extends SimEntityBase { /** * Generates interarrival times */ private RandomVariate interarrivalTimeGenerator; /** * The number of arrivals at any given (sim) time */ protected int numberArrivals; /** * Zero-argument constructor */ public ArrivalProcess() { } /** * Instantiate an Arrival Process with the given interarrivalTimeGenerator * * @param interarrivalTimeGenerator Given interarrivalTimeGenerator */ public ArrivalProcess(RandomVariate interarrivalTimeGenerator) { setInterarrivalTimeGenerator(interarrivalTimeGenerator); } /** * Initialize numberArrivals to 0 */ @Override public void reset() { super.reset(); numberArrivals = 0; } /** * Schedule first Arrival event with delay of interarrival time */ public void doRun() { firePropertyChange("numberArrivals", getNumberArrivals()); waitDelay("Arrival", interarrivalTimeGenerator); } /** * Increment numberArrivals<br> * Schedule next Arrival event with delay of interarrival time */ public void doArrival() { int oldNumberArrivals = getNumberArrivals(); numberArrivals += 1; firePropertyChange("numberArrivals", oldNumberArrivals, getNumberArrivals()); waitDelay("Arrival", interarrivalTimeGenerator); } /** * @return the interarrivalTimeGenerator */ public RandomVariate getInterarrivalTimeGenerator() { return interarrivalTimeGenerator; } /** * @param interarrivalTimeGenerator the interarrivalTimeGenerator to set */ public void setInterarrivalTimeGenerator(RandomVariate interarrivalTimeGenerator) { this.interarrivalTimeGenerator = interarrivalTimeGenerator; } /** * @return the numberArrivals */ public int getNumberArrivals() { return numberArrivals; } }