--- /dev/null
+package example.chord;\r
+\r
+import java.math.BigInteger;\r
+import java.util.Random;\r
+import peersim.config.Configuration;\r
+import peersim.core.CommonState;\r
+import peersim.core.Network;\r
+import peersim.core.Node;\r
+import peersim.dynamics.NodeInitializer;\r
+\r
+public class ChordInitializer implements NodeInitializer {\r
+\r
+ private static final String PAR_PROT = "protocol";\r
+\r
+ private int pid = 0;\r
+\r
+ private ChordProtocol cp;\r
+\r
+ public ChordInitializer(String prefix) {\r
+ pid = Configuration.getPid(prefix + "." + PAR_PROT);\r
+ }\r
+\r
+ public void initialize(Node n) {\r
+ cp = (ChordProtocol) n.getProtocol(pid);\r
+ join(n);\r
+ }\r
+\r
+ public void join(Node myNode) {\r
+ Random generator = new Random();\r
+ //Random generator = new Random(1234567890);\r
+ cp.predecessor = null;\r
+ // search a node to join\r
+ Node n;\r
+ do {\r
+ n = Network.get(generator.nextInt(Network.size()));\r
+ } while (n == null || n.isUp() == false);\r
+ cp.m = ((ChordProtocol) n.getProtocol(pid)).m;\r
+ cp.chordId = new BigInteger(cp.m, CommonState.r);\r
+ ChordProtocol cpRemote = (ChordProtocol) n.getProtocol(pid);\r
+\r
+ Node successor = cpRemote.find_successor(cp.chordId);\r
+ cp.fails = 0;\r
+ cp.stabilizations = 0;\r
+ cp.varSuccList = cpRemote.varSuccList;\r
+ cp.varSuccList = 0;\r
+ cp.succLSize = cpRemote.succLSize;\r
+ cp.successorList = new Node[cp.succLSize];\r
+ cp.successorList[0] = successor;\r
+ cp.fingerTable = new Node[cp.m];\r
+ long succId = 0;\r
+ BigInteger lastId = ((ChordProtocol) Network.get(Network.size() - 1)\r
+ .getProtocol(pid)).chordId;\r
+ do {\r
+ cp.stabilizations++;\r
+ succId = cp.successorList[0].getID();\r
+ cp.stabilize(myNode);\r
+ if (((ChordProtocol) cp.successorList[0].getProtocol(pid)).chordId\r
+ .compareTo(cp.chordId) < 0) {\r
+ cp.successorList[0] = ((ChordProtocol) cp.successorList[0]\r
+ .getProtocol(pid)).find_successor(cp.chordId);\r
+ }\r
+ // controllo di non essere l'ultimo elemento della rete\r
+ if (cp.chordId.compareTo(lastId) > 0) {\r
+ cp.successorList[0] = Network.get(0);\r
+ break;\r
+ }\r
+ } while (cp.successorList[0].getID() != succId\r
+ || ((ChordProtocol) cp.successorList[0].getProtocol(pid)).chordId\r
+ .compareTo(cp.chordId) < 0);\r
+ cp.fixFingers();\r
+ }\r
+}\r