4 package example.chord;
\r
6 import java.util.ArrayList;
\r
7 import peersim.core.Control;
\r
8 import peersim.core.Network;
\r
9 import peersim.config.Configuration;
\r
15 public class MessageCounterObserver implements Control {
\r
17 private static final String PAR_PROT = "protocol";
\r
19 private final String prefix;
\r
21 private final int pid;
\r
26 public MessageCounterObserver(String prefix) {
\r
27 this.prefix = prefix;
\r
28 this.pid = Configuration.getPid(prefix + "." + PAR_PROT);
\r
34 * @see peersim.core.Control#execute()
\r
36 public boolean execute() {
\r
37 int size = Network.size();
\r
40 ArrayList hopCounters = new ArrayList(); // struttura dati che
\r
41 // memorizza gli hop di
\r
42 // tutti i mess mandati
\r
43 hopCounters.clear();
\r
45 int min = Integer.MAX_VALUE;
\r
46 for (int i = 0; i < size; i++) {
\r
47 ChordProtocol cp = (ChordProtocol) Network.get(i).getProtocol(pid);
\r
48 // trovare tutti gli hopCOunter dei messaggi lookup mandati
\r
49 int[] counters = new int[cp.getLookupMessage().length];
\r
50 System.arraycopy(cp.getLookupMessage(), 0, counters, 0, cp
\r
51 .getLookupMessage().length);
\r
52 totalStab = totalStab + cp.stabilizations;
\r
53 totFails = totFails + cp.fails;
\r
54 cp.stabilizations = 0;
\r
56 int maxNew = maxArray(counters, cp.index);
\r
59 if (cp.index != 0) {
\r
60 for (int j = 0; j < cp.index; j++)
\r
61 hopCounters.add(counters[j]);
\r
62 int minNew = minArray(counters, cp.index);
\r
66 cp.emptyLookupMessage();
\r
68 double media = meanCalculator(hopCounters);
\r
70 System.out.println("Mean: " + media + " Max Value: " + max
\r
71 + " Min Value: " + min + " # Observations: "
\r
72 + hopCounters.size());
\r
73 System.out.println(" # Stabilizations: " + totalStab + " # Failures: "
\r
75 System.out.println("");
\r
79 private double meanCalculator(ArrayList list) {
\r
80 int lenght = list.size();
\r
84 for (int i = 0; i < lenght; i++) {
\r
85 sum = sum + ((Integer) list.get(i)).intValue();
\r
87 double mean = sum / lenght;
\r
91 private int maxArray(int[] array, int dim) {
\r
93 for (int j = 0; j < dim; j++) {
\r
100 private int minArray(int[] array, int dim) {
\r
102 for (int j = 0; j < dim; j++) {
\r
103 if (array[j] < min)
\r