public class SWRTest { /* Create a sliding window receiver. */ private static int sws = 3; private static int rws = 2; private static SWR swr = new SWR(sws, rws); /* 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, -1, 0, -1, -1, 2, -1, 4, -1, 3, -1, -1, 4, 5, -1, 6, 7, -1, -1, 8, 8, 7, -1, -1, 10, -1, 9, -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] % (2*sws), data[trace[i]]); /* visualize on screen */ showHandlePacket(ack, trace[i], data[trace[i]]); } } System.out.println(message.toString()); } }