package siebog.agents.xjaf.pairs;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
/**
* Implementation of a RMI service that will receive performance evaluation results.
*
* @author <a href="mitrovic.dejan@gmail.com">Dejan Mitrovic</a>
*/
public class ResultsServiceImpl extends UnicastRemoteObject implements ResultsService {
private static final long serialVersionUID = 1L;
private int numPairs;
private List<Long> rtts;
protected ResultsServiceImpl(int numPairs) throws RemoteException {
this.numPairs = numPairs;
rtts = new ArrayList<>(numPairs);
}
@Override
public synchronized void add(long rtt, String nodeName) throws RemoteException {
rtts.add(rtt);
System.out.printf("Pair %d from %s done.\n", rtts.size(), nodeName);
if (rtts.size() == numPairs) {
long sum = 0;
for (long l : rtts)
sum += l;
System.out.printf("Average RTT: %d ms\n", sum / numPairs);
System.out.printf("Minimum: %d ms\n", Collections.min(rtts));
System.out.printf("Maximum: %d ms\n", Collections.max(rtts));
TimerTask task = new TimerTask() {
@Override
public void run() {
System.exit(0);
}
};
new Timer().schedule(task, 1000);
}
}
}