nus/cs2030s/labs/Lab1/ArrivalEvent.java

51 lines
1.6 KiB
Java

/**
* The ArrivalEvent is an Event which handles the arrival of a customer
* It decides whether a customer should go into queue or go to a counter
* It also allocates a counter to the customer. This event thus returns either a
* DepartureEvent or a ServiceBeginEvent
*
* @author Yadunand Prem
* @version CS2030S AY22/23 Semester 2
*/
class ArrivalEvent extends Event {
private Customer customer;
private Shop shop;
public ArrivalEvent(Customer customer, Shop shop) {
super(customer.getArrivalTIme());
this.customer = customer;
this.shop = shop;
}
@Override
public Event[] simulate() {
ServiceCounter availableCounter = this.shop.getAvailableCounter();
// check if counters are available. If available, start service for that
// customer
if (availableCounter != null) {
return new Event[] {
new ServiceBeginEvent(this.getTime(), customer, shop, availableCounter) };
}
// if no counters available, check if queue slots avialable in counters
availableCounter = this.shop.findCounterWithQueue();
if (availableCounter != null) {
return new Event[] {
new JoinCounterQueueEvent(this.getTime(), this.customer, availableCounter)
};
}
// if shop queue isn't empty, join shop queue
if (!this.shop.isQueueFull()) {
return new Event[] { new JoinShopQueueEvent(customer, shop) };
}
return new Event[] { new DepartureEvent(this.getTime(), customer) };
}
@Override
public String toString() {
return String.format("%s: %s arrived %s", super.toString(), this.customer, this.shop);
}
}