+++ /dev/null
-/**\r
- * \r
- */\r
-package example.chord;\r
-\r
-import java.util.ArrayList;\r
-import peersim.core.Control;\r
-import peersim.core.Network;\r
-import peersim.config.Configuration;\r
-\r
-/**\r
- * @author Andrea\r
- * \r
- */\r
-public class MessageCounterObserver implements Control {\r
-\r
- private static final String PAR_PROT = "protocol";\r
-\r
- private final String prefix;\r
-\r
- private final int pid;\r
-\r
- /**\r
- * \r
- */\r
- public MessageCounterObserver(String prefix) {\r
- this.prefix = prefix;\r
- this.pid = Configuration.getPid(prefix + "." + PAR_PROT);\r
- }\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see peersim.core.Control#execute()\r
- */\r
- public boolean execute() {\r
- int size = Network.size();\r
- int totalStab = 0;\r
- int totFails = 0;\r
- ArrayList hopCounters = new ArrayList(); // struttura dati che\r
- // memorizza gli hop di\r
- // tutti i mess mandati\r
- hopCounters.clear();\r
- int max = 0;\r
- int min = Integer.MAX_VALUE;\r
- for (int i = 0; i < size; i++) {\r
- ChordProtocol cp = (ChordProtocol) Network.get(i).getProtocol(pid);\r
- // trovare tutti gli hopCOunter dei messaggi lookup mandati\r
- int[] counters = new int[cp.getLookupMessage().length];\r
- System.arraycopy(cp.getLookupMessage(), 0, counters, 0, cp\r
- .getLookupMessage().length);\r
- totalStab = totalStab + cp.stabilizations;\r
- totFails = totFails + cp.fails;\r
- cp.stabilizations = 0;\r
- cp.fails = 0;\r
- int maxNew = maxArray(counters, cp.index);\r
- if (maxNew > max)\r
- max = maxNew;\r
- if (cp.index != 0) {\r
- for (int j = 0; j < cp.index; j++)\r
- hopCounters.add(counters[j]);\r
- int minNew = minArray(counters, cp.index);\r
- if (minNew < min)\r
- min = minNew;\r
- }\r
- cp.emptyLookupMessage();\r
- }\r
- double media = meanCalculator(hopCounters);\r
- if (media > 0)\r
- System.out.println("Mean: " + media + " Max Value: " + max\r
- + " Min Value: " + min + " # Observations: "\r
- + hopCounters.size());\r
- System.out.println(" # Stabilizations: " + totalStab + " # Failures: "\r
- + totFails);\r
- System.out.println("");\r
- return false;\r
- }\r
-\r
- private double meanCalculator(ArrayList list) {\r
- int lenght = list.size();\r
- if (lenght == 0)\r
- return 0;\r
- int sum = 0;\r
- for (int i = 0; i < lenght; i++) {\r
- sum = sum + ((Integer) list.get(i)).intValue();\r
- }\r
- double mean = sum / lenght;\r
- return mean;\r
- }\r
-\r
- private int maxArray(int[] array, int dim) {\r
- int max = 0;\r
- for (int j = 0; j < dim; j++) {\r
- if (array[j] > max)\r
- max = array[j];\r
- }\r
- return max;\r
- }\r
-\r
- private int minArray(int[] array, int dim) {\r
- int min = 0;\r
- for (int j = 0; j < dim; j++) {\r
- if (array[j] < min)\r
- min = array[j];\r
- }\r
- return min;\r
- }\r
-}\r