Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
peersimgrid release 1.0
[simgrid.git] / contrib / psg / src / example / symphony / SymphonyNodeInizializer.java
1 package example.symphony;\r
2 \r
3 import java.util.logging.Level;\r
4 import java.util.logging.Logger;\r
5 import peersim.config.Configuration;\r
6 import peersim.core.Network;\r
7 import peersim.core.Node;\r
8 import peersim.dynamics.NodeInitializer;\r
9 \r
10 /**\r
11  *\r
12  * @author Andrea Esposito <and1989@gmail.com>\r
13  */\r
14 public class SymphonyNodeInizializer implements NodeInitializer {\r
15 \r
16     private static final String PAR_NETMANAGER = "symphonynetworkmanager";\r
17     private static final String PAR_SYMPHONY = "symphony";\r
18     private static final String PAR_BOOTNODE = "bootstrapnode";\r
19     private final int networkManagerID;\r
20     private final int symphonyID;\r
21     private final int indexBootstrapNode;\r
22 \r
23     public SymphonyNodeInizializer(String prefix) {\r
24 \r
25         networkManagerID = Configuration.getPid(prefix + "." + PAR_NETMANAGER);\r
26         indexBootstrapNode = Configuration.getInt(prefix + "." + PAR_BOOTNODE, 0);\r
27         symphonyID = Configuration.getPid(prefix + "." + PAR_SYMPHONY);\r
28     }\r
29 \r
30     @Override\r
31     public void initialize(Node node) {\r
32         int indexRealBootstrapNode = indexBootstrapNode;\r
33         Node realBootstrapNode = Network.get(indexBootstrapNode);\r
34         SymphonyNetworkManager symphonyNetworkManager = (SymphonyNetworkManager) node.getProtocol(networkManagerID);\r
35         SymphonyProtocol symphony = (SymphonyProtocol) realBootstrapNode.getProtocol(symphonyID);\r
36 \r
37         boolean joinSent;\r
38         do {\r
39             try {\r
40                 while (!symphony.isBootstrapped() || !realBootstrapNode.isUp()) {\r
41                     indexRealBootstrapNode = (indexRealBootstrapNode + 1) % Network.size();\r
42                     realBootstrapNode = Network.get(indexRealBootstrapNode);\r
43                     symphony = (SymphonyProtocol) realBootstrapNode.getProtocol(symphonyID);\r
44 \r
45                     if (indexRealBootstrapNode == indexBootstrapNode) {\r
46                         Logger.getLogger(SymphonyNodeInizializer.class.getName()).log(Level.WARNING, "No node ONLINE. Impossible to do the network bootstrap.");\r
47                         return;\r
48                     }\r
49                 }\r
50 \r
51                 symphonyNetworkManager.join(node, realBootstrapNode);\r
52                 joinSent = true;\r
53             } catch (RoutingException ex) {\r
54                 Logger.getLogger(SymphonyNodeInizializer.class.getName()).log(Level.SEVERE, "Join Issue");\r
55                 joinSent = false;\r
56             }\r
57         } while (!joinSent);\r
58     }\r
59 }\r