package lsr.paxos.test.utils; import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.IOException; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class BarrierService { private static long lastBarrierTime = System.currentTimeMillis(); private static long totalTime; private static int totalTransactions; public static class RequestHandlerThread extends Thread { private Socket socket; public static Object waitLock = new Object(); public static int numberOfWaiting = 0; public ServerThread serverThread; public RequestHandlerThread(Socket socket, ServerThread serverThread) { this.socket = socket; this.serverThread = serverThread; } public void run() { PrintWriter out; DataInputStream dis; try { dis = new DataInputStream(new BufferedInputStream( socket.getInputStream())); synchronized (waitLock) { numberOfWaiting += dis.readInt(); totalTransactions += dis.readInt(); totalTime += dis.readLong(); // numberOfWaiting++; waitLock.wait(); } out = new PrintWriter(socket.getOutputStream(), true); out.println(true); out.close(); socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static class ServerThread extends Thread { int port; ServerSocket srvr; public ServerThread(int port) { this.port = port; } public void run() { try { srvr = new ServerSocket(port); while (true) { Socket socket = srvr.accept(); Thread t = new RequestHandlerThread(socket, this); t.start(); } } catch (IOException e) { e.printStackTrace(); } } } public static void main(String args[]) throws InterruptedException, IOException { int numberOfClients = Integer.parseInt(args[0]); int port = Integer.parseInt(args[1]); int counter = 0; ServerThread serverThread = new ServerThread(port); serverThread.start(); // try // { while (true) { // Vector<Thread> threads = new Vector<Thread>(); // for (int i = 0; i < 1; i++) // { // Socket socket = srvr.accept(); // Thread t = new RequestHandlerThread(socket, this); // threads.add(t); // t.start(); // } synchronized (RequestHandlerThread.waitLock) { while (RequestHandlerThread.numberOfWaiting != numberOfClients) { RequestHandlerThread.waitLock.wait(100); } long newTime = System.currentTimeMillis(); if (counter % 2 == 1) System.out.println(totalTime / RequestHandlerThread.numberOfWaiting + "\t\t" + totalTransactions + "\t\t" + 1000f * totalTransactions / totalTime * RequestHandlerThread.numberOfWaiting + "\t\t\t" + (newTime - lastBarrierTime) / 1000.0f); RequestHandlerThread.numberOfWaiting = 0; totalTime = 0; totalTransactions = 0; lastBarrierTime = newTime; RequestHandlerThread.waitLock.notifyAll(); } // long newTime = System.currentTimeMillis(); // if (counter % 2 == 1) // System.out.println((newTime - lastBarrierTime) / 1000.0f); // lastBarrierTime = newTime; // for (Thread thread : threads) // { // thread.join(); // } counter++; } // } // finally // { // srvr.close(); // } } }