/** A class that extends the Server class Is a server that also has a queue attached to it @author Erika Harrison @version 1.0 24-06-02 */ public class QueuedServer extends Server { private Queue queue = DataFactory.makeQueue(); //instance variables used for statistics private double totalQueueTime = 0; private double queueLengthTime = 0; private double busyTime = 0; private double lastChangeInQueue = 0; private boolean recordStats = false; //creates the server public QueuedServer() { super(); } public void addEvent(Student student, double currTime) //pre: student != null //post: adds another event to the server given the server's current situation // ie. adds to the queue if there is currently a student, or sets up the next // event if there is no current student { if (getStudent() == null) //there is no current student being processed { //sets up the new student to be processed setStudent(student); //increments the server stats as necessary double meanTime = generateNextTime.nextExp(mean); setTime(meanTime + currTime); if (recordStats) { busyTime += meanTime; } }else //the server is currently busy { if (recordStats) { totalQueueTime += (currTime - lastChangeInQueue) * queue.size(); } Debug.println("Time Change = " + (currTime - lastChangeInQueue) + " Queue Size " + queue.size()); lastChangeInQueue = currTime; queue.enqueue(student); //required to update the student's queue time stats student.addToQueue(currTime); } } public void setNextEvent(double currTime) //pre: the previous student is finished processing //post: a new event is set up, if it exists (if there are students waiting // in the queue { if (queue.size() != 0) //students exist in the queue { //increments the server stats as necessary double nextTime = generateNextTime.nextExp(mean); setTime(nextTime + currTime); if (recordStats) { totalQueueTime += (currTime - lastChangeInQueue) * queue.size(); busyTime += nextTime; } Debug.println("Time Change = " + (currTime - lastChangeInQueue) + " Queue Size " + queue.size()); lastChangeInQueue = currTime; //starts processing a new student Student student = (Student)queue.dequeue(); setStudent(student); //required to update the student's queue time stats student.doneQueue(currTime); } } public int getQueueLength() //pre: true //post: returns the number of students in the server's queue { return queue.size(); } public double getQueueTime() //pre: true //post: returns the current amount of time spent by each processed student // in the server { return totalQueueTime; } public double getBusyTime() //pre: true //post: returns the current amount of time spent processing the already // processed students { return busyTime; } public void startStats() //pre: true //post: the stats of the server are initialized { recordStats = true; } }