public class UnbufferedNodeModel extends SimulationModel {
    private IncomingLine inLine;
    private OutgoingLine outLine;
    private int completedMessages;
    private int lostMessages;

    public UnbufferedNodeModel (double arrival, double sendtime) {
        super("UnbufferedNodeModel");
        inLine = new IncomingLine(0, 0, arrival);
        outLine = new OutgoingLine(0, sendtime);
        completedMessages = 0;
        lostMessages = 0;
    }

        // Generate any starting events needed for the model
    public void initializeEvents( ) {
        addEvent(inLine.getNextArrival());
    }

    public void processEvent(Event e) {

        switch (e.getWhat()) {
            case Event.MSG_ARRIVAL:
                if (!outLine.isBusy()) 
                   addEvent(outLine.sendMessage(e.getWhen()));
                else
                   lostMessages++;
                addEvent(inLine.getNextArrival());
                break;
            case Event.MSG_SENT:
                completedMessages++;
                break;
            case Event.STOP:
                setSimulationStopped();
                break;
            default:
                System.err.println(e + " {unrecognized event}");
                break;
        }
    }

    public String toString( ) {
        return super.toString() + "\n[" + outLine + "]\n[" + inLine + "]"
                        + " Completed Messages:" + completedMessages
                        + " Lost Messages:" + lostMessages;

    }
}

