public class SlidingWindowReceiverTest { /* Create a 5-slot receiving window. * Assume that each packet contains a four bit field for its * sequence number. Therefore the usable range of sequence numbers * is 0 <= seqNr < 2^4 = 16. */ private static SlidingWindowReceiver swr = new SlidingWindowReceiver(5, 16); /* Visualization functions. */ private static void showGetNextPacket(String retval) { System.out.print ("\t\t\t " + (retval != null? retval : "" )); System.out.println (" \t\t" + swr.show()); } private static void showHandlePacket(int ack, int s, String data) { System.out.print("--- [" + s + ": " + data + "] -->"); System.out.println("\t\t\t\t" + swr.show()); if (ack >= 0) { System.out.println("<-- [ACK "+ ack + "] ---"); } } public static void main(String[] args) throws Exception { String[] data = {"And ", "then ", "the ", "quick ", "brown ", "fox ", "jumped ", "over ", "the ", "lazy ", "dog."}; /* Testing sequence: positive values indicate that the * corresponding data element (see above) is delivered, * negative values indicate that the upper layer requests a * packet. */ int[] trace = {1, 2, 3, -1, -1, 4, 5, 6, -1, 0, -1, -1, 7, 8, 9, -1, -1, 6, 7, 8, -1, -1, 5, 9, -1, 10, -1, -1, 9, 8, -1, -1, -1}; // Commence testing sequence. StringBuffer message = new StringBuffer(); System.out.println(" handlePacket\tgetNextPacket\t\t\tReceiver Window"); String u = "----------------"; System.out.println(u+u+u+u+u); for (int i = 0; i < trace.length; i++) { if (trace[i] < 0) { /* Upper layer requests next packet. */ String next = (String)swr.getNextPacket(); if (next != null) { message = message.append(next); } /* Visualize on screen. */ showGetNextPacket(next); } else { /* Lower layer delivers next packet. */ int ack = swr.handlePacket(trace[i], data[trace[i]]); /* visualize on screen */ showHandlePacket(ack, trace[i], data[trace[i]]); } } System.out.println(message.toString()); } }