--- /dev/null
+package example.symphony;\r
+\r
+import peersim.core.Node;\r
+\r
+/**\r
+ *\r
+ * @author Andrea Esposito <and1989@gmail.com>\r
+ */\r
+public class Message implements Cloneable {\r
+\r
+ public enum MessageType {\r
+\r
+ ROUTE, ROUTE_RESPONSE, ROUTE_FAIL,\r
+ JOIN, JOIN_RESPONSE,\r
+ UPDATE_NEIGHBOURS, UPDATE_NEIGHBOURS_RESPONSE,\r
+ REQUEST_LONG_RANGE_LINK, ACCEPTED_LONG_RANGE_LINK, REJECT_LONG_RANGE_LINK, DISCONNECT_LONG_RANGE_LINK, UNAVAILABLE_LONG_RANGE_LINK,\r
+ UPDATE_STATUS, UPDATE_STATUS_RESPONSE,\r
+ LEAVE,\r
+ KEEP_ALIVE, KEEP_ALIVE_RESPONSE\r
+ }\r
+ private long hopCounter;\r
+ private MessageType type;\r
+ private Node src;\r
+ private Node currentHop;\r
+ private Object body;\r
+ private static long globalID = 0;\r
+ private final long id;\r
+\r
+ public Message(Object body, Node src, MessageType type) {\r
+ this.type = type;\r
+ this.src = src;\r
+ this.body = body;\r
+ hopCounter = 0;\r
+ id = globalID++;\r
+ currentHop = src;\r
+ }\r
+\r
+ public long getID() {\r
+ return id;\r
+ }\r
+\r
+ public Object getBody() {\r
+ return body;\r
+ }\r
+\r
+ public void incrementHop() {\r
+ hopCounter++;\r
+ }\r
+\r
+ public long getHop() {\r
+ return hopCounter;\r
+ }\r
+\r
+ public MessageType getType() {\r
+ return type;\r
+ }\r
+\r
+ public Node getSourceNode() {\r
+ return src;\r
+ }\r
+\r
+ public Node getCurrentHop() {\r
+ return currentHop;\r
+ }\r
+\r
+ public void setCurrentHop(Node currentHop) {\r
+ this.currentHop = currentHop;\r
+ }\r
+\r
+ @Override\r
+ public Object clone() throws CloneNotSupportedException {\r
+ return super.clone();\r
+ }\r
+\r
+ @Override\r
+ public String toString() {\r
+\r
+ StringBuilder builder = new StringBuilder();\r
+ builder.append("Message@").append(this.hashCode()).append("[\n");\r
+\r
+ builder.append("\tID : ").append(id).append(",\n");\r
+ builder.append("\tSource ID: ").append(src.getID()).append(",\n");\r
+ builder.append("\tType : ").append(type).append(",\n");\r
+ builder.append("\tBody : ").append(body).append(",\n");\r
+ builder.append("\tCurrent Hop ID: ").append(currentHop.getID()).append(",\n");\r
+ builder.append("\tHop Counter : ").append(hopCounter).append("\n]\n");\r
+\r
+ return builder.toString();\r
+ }\r
+}\r