package outgoinglinepkg;
import weiss.nonstandard.*;

/**
 * Title:        OutgoingLine test program
 * Description:  Test program for the OutgoingLine object as specified in CS 1721 Lab 6
 * Part I.D
 * Copyright:    Copyright (c) 2001
 * Company:      UTSA
 * @author Kay  A. Robbins
 * @version 1.0
 */

public class OutgoingMain {
  public static void main(String[] args) {
    System.out.println("\nLab6 Part I D.1 Creating an OutgoingLine object.");
    OutgoingLine g = new OutgoingLine(1, 5);
    System.out.println("Outgoing line g = " + g);

    System.out.println("\nLab 6 Part I D.2 Sending messages to the OutgoingLine.");
    Event e1 = new Event(1, 0, 15);  // Stop event
    Event e2 = new Event(1, 1, 2);  // arrival event
    PriorityQueue p = new BinaryHeap();
    p.insert(e1);
    p.insert(e2);

    int when = 5;
    while( !p.isEmpty() ){
      Event e = (Event)p.deleteMin();
      System.out.println("deleteMin " + e);
      if(e.getWhat() == Event.MSG_ARRIVAL){
         Event sendEvent = g.sendMessage(e.getWhen());
        if(sendEvent!= null){
          System.out.println("insert " + sendEvent);
          p.insert( sendEvent );
          g.setBusy();
        }
        Event nextArrival = new Event(1,1,when );
        System.out.println("nextArrival " + nextArrival);
        p.insert( nextArrival );
        when += 3;

      }
      else if(e.getWhat() == Event.MSG_SENT){
        g.setFree();
      }
      else
        break;
      System.out.println("OutgoingLine " + g);
    }

  }
}

