+++ /dev/null
-/**\r
- * \r
- */\r
-package example.chord;\r
-\r
-import peersim.core.*;\r
-import peersim.config.Configuration;\r
-import java.math.*;\r
-\r
-/**\r
- * @author Andrea\r
- * \r
- */\r
-public class CreateNw implements Control {\r
-\r
- private int pid = 0;\r
-\r
- private static final String PAR_IDLENGTH = "idLength";\r
-\r
- private static final String PAR_PROT = "protocol";\r
-\r
- private static final String PAR_SUCCSIZE = "succListSize";\r
-\r
- int idLength = 0;\r
-\r
- int successorLsize = 0;\r
-\r
- int fingSize = 0;\r
- //campo x debug\r
- boolean verbose = false;\r
-\r
- /**\r
- * \r
- */\r
- public CreateNw(String prefix) {\r
- pid = Configuration.getPid(prefix + "." + PAR_PROT);\r
- idLength = Configuration.getInt(prefix + "." + PAR_IDLENGTH); \r
- successorLsize = Configuration.getInt(prefix + "." + PAR_SUCCSIZE); \r
- }\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see peersim.core.Control#execute()\r
- */\r
-\r
- public boolean execute() {\r
- for (int i = 0; i < Network.size(); i++) {\r
- Node node = (Node) Network.get(i);\r
- ChordProtocol cp = (ChordProtocol) node.getProtocol(pid);\r
- cp.m = idLength;\r
- cp.succLSize = successorLsize;\r
- cp.varSuccList = 0;\r
- cp.chordId = new BigInteger(idLength, CommonState.r);\r
- cp.fingerTable = new Node[idLength];\r
- cp.successorList = new Node[successorLsize];\r
- }\r
- NodeComparator nc = new NodeComparator(pid);\r
- Network.sort(nc);\r
- createFingerTable();\r
- return false;\r
- }\r
-\r
- public Node findId(BigInteger id, int nodeOne, int nodeTwo) {\r
- if (nodeOne >= (nodeTwo - 1)) \r
- return Network.get(nodeOne);\r
- int middle = (nodeOne + nodeTwo) / 2;\r
- if (((middle) >= Network.size() - 1))\r
- System.out.print("ERROR: Middle is bigger than Network.size");\r
- if (((middle) <= 0))\r
- return Network.get(0);\r
- try {\r
- BigInteger newId = ((ChordProtocol) ((Node) Network.get(middle))\r
- .getProtocol(pid)).chordId;\r
- BigInteger lowId;\r
- if (middle > 0)\r
- lowId = ((ChordProtocol) ((Node) Network.get(middle - 1))\r
- .getProtocol(pid)).chordId;\r
- else\r
- lowId = newId;\r
- BigInteger highId = ((ChordProtocol) ((Node) Network\r
- .get(middle + 1)).getProtocol(pid)).chordId;\r
- if (id.compareTo(newId) == 0\r
- || ((id.compareTo(newId) == 1) && (id.compareTo(highId) == -1))) {\r
- return Network.get(middle);\r
- }\r
- if ((id.compareTo(newId) == -1) && (id.compareTo(lowId) == 1)) {\r
- if (middle > 0)\r
- return Network.get(middle - 1);\r
- else\r
- return Network.get(0);\r
- }\r
- if (id.compareTo(newId) == -1) {\r
- return findId(id, nodeOne, middle);\r
- } else if (id.compareTo(newId) == 1) {\r
- return findId(id, middle, nodeTwo);\r
- }\r
- return null;\r
- } catch (Exception e) {\r
- e.printStackTrace();\r
- return null;\r
- }\r
- }\r
-\r
- public void createFingerTable() {\r
- BigInteger idFirst = ((ChordProtocol) Network.get(0).getProtocol(pid)).chordId;\r
- BigInteger idLast = ((ChordProtocol) Network.get(Network.size() - 1)\r
- .getProtocol(pid)).chordId;\r
- for (int i = 0; i < Network.size(); i++) {\r
- Node node = (Node) Network.get(i);\r
- ChordProtocol cp = (ChordProtocol) node.getProtocol(pid);\r
- for (int a = 0; a < successorLsize; a++) {\r
- if (a + i < (Network.size() - 1))\r
- cp.successorList[a] = Network.get(a + i + 1);\r
- else\r
- cp.successorList[a] = Network.get(a);\r
- }\r
- if (i > 0)\r
- cp.predecessor = (Node) Network.get(i - 1);\r
- else\r
- cp.predecessor = (Node) Network.get(Network.size() - 1);\r
- int j = 0;\r
- for (j = 0; j < idLength; j++) {\r
- BigInteger base;\r
- if (j == 0)\r
- base = BigInteger.ONE;\r
- else {\r
- base = BigInteger.valueOf(2);\r
- for (int exp = 1; exp < j; exp++) {\r
- base = base.multiply(BigInteger.valueOf(2));\r
- }\r
- }\r
- BigInteger pot = cp.chordId.add(base);\r
- if (pot.compareTo(idLast) == 1) {\r
- pot = (pot.mod(idLast));\r
- if (pot.compareTo(cp.chordId) != -1) {\r
- break;\r
- }\r
- if (pot.compareTo(idFirst) == -1) {\r
- cp.fingerTable[j] = Network.get(Network.size() - 1);\r
- continue;\r
- }\r
- }\r
- cp.fingerTable[j] = findId(pot, 0, Network.size() - 1);\r
- }\r
- }\r
- }\r
-}\r