--- /dev/null
+package example.symphony;\r
+\r
+import peersim.config.Configuration;\r
+import peersim.core.Control;\r
+import peersim.core.Network;\r
+import peersim.core.Node;\r
+\r
+/**\r
+ *\r
+ * @author Andrea Esposito <and1989@gmail.com>\r
+ */\r
+public class SymphonyStatistics implements Control {\r
+\r
+ private static final String PAR_SYMPHONY = "symphony";\r
+ private final int symphonyID;\r
+ private long totalMsg = 0;\r
+ private long numRouteResposeMsg = 0;\r
+ private long numRouteMsg = 0;\r
+ private long numRouteFailMsg = 0;\r
+ private long numRouteFoundManagerMsg = 0;\r
+ private double mediaHopRouteResponseMsg = 0.0;\r
+\r
+ public SymphonyStatistics(String prefix) {\r
+ symphonyID = Configuration.getPid(prefix + "." + PAR_SYMPHONY);\r
+ }\r
+\r
+ public boolean execute() {\r
+\r
+ AdapterIterableNetwork itNetwork = new AdapterIterableNetwork();\r
+ for (Node node : itNetwork) {\r
+ SymphonyProtocol symphony = (SymphonyProtocol) node.getProtocol(symphonyID);\r
+ Tuple<Message, Message>[] tupleMessages = symphony.getHistoryMessage();\r
+ totalMsg += tupleMessages.length;\r
+\r
+ for (Tuple<Message, Message> tupleMessage : tupleMessages) {\r
+\r
+ Message message = tupleMessage.x;\r
+\r
+ if (message != null) {\r
+ switch (message.getType()) {\r
+ case ROUTE:\r
+ numRouteMsg++;\r
+ if (tupleMessage.y != null && tupleMessage.y.getType() == Message.MessageType.ROUTE_RESPONSE) {\r
+ numRouteFoundManagerMsg++;\r
+ mediaHopRouteResponseMsg = ((mediaHopRouteResponseMsg * (numRouteFoundManagerMsg - 1)) + message.getHop()) / (double) numRouteFoundManagerMsg;\r
+ }\r
+ break;\r
+ case ROUTE_FAIL:\r
+ numRouteFailMsg++;\r
+ break;\r
+ case ROUTE_RESPONSE:\r
+ numRouteResposeMsg++;\r
+ break;\r
+ }\r
+ }\r
+ }\r
+\r
+ symphony.clearHistoryMessage();\r
+ }\r
+\r
+ printStatistics();\r
+\r
+ return false;\r
+ }\r
+\r
+ private void printStatistics() {\r
+ System.out.println("### Statistics ###");\r
+ System.out.println("- Total Messages: " + totalMsg);\r
+ System.out.println("- Total Route Messages: " + numRouteMsg);\r
+ System.out.println("- Found Manager Route Message: " + numRouteFoundManagerMsg);\r
+ System.out.println("- Response Message: " + numRouteResposeMsg);\r
+ System.out.println("- Fail Message: " + numRouteFailMsg);\r
+ System.out.println();\r
+ System.out.println("Average Hop:" + mediaHopRouteResponseMsg + " Expected value (k = log n): " + (Math.log(Network.size()) / Math.log(2)));\r
+ System.out.println("### END ###\n");\r
+ }\r
+}\r