83
|
1 package christie.topology.manager;
|
|
2
|
|
3
|
|
4 import christie.annotation.Peek;
|
|
5 import christie.annotation.Take;
|
|
6 import christie.codegear.CodeGear;
|
|
7 import christie.codegear.CodeGearManager;
|
|
8 import christie.topology.HostMessage;
|
176
|
9 import christie.topology.Message;
|
161
|
10 import christie.topology.TopologyDataGear;
|
83
|
11
|
|
12 import java.util.HashMap;
|
|
13
|
|
14 public class CreateTreeTopology extends CodeGear{
|
|
15
|
|
16 @Take
|
|
17 HostMessage newHost;
|
|
18
|
|
19 @Take
|
|
20 int hostCount;
|
|
21
|
129
|
22 @Take
|
83
|
23 HashMap<String, HostMessage> nameTable;
|
|
24
|
|
25 @Take
|
|
26 String MD5;
|
|
27
|
129
|
28 @Take
|
83
|
29 HashMap<String, String> absCookieTable;
|
|
30
|
129
|
31 @Take
|
83
|
32 ParentManager parentManager;
|
|
33
|
|
34 public CreateTreeTopology(){
|
|
35 }
|
|
36
|
|
37 @Override
|
|
38 protected void run(CodeGearManager cgm) {
|
95
|
39
|
83
|
40
|
|
41 String nodeName = "node" + hostCount;
|
94
|
42 String newHostName = newHost.getHostName();
|
|
43 int newHostPort = newHost.getPort();
|
|
44
|
161
|
45 cgm.createRemoteDGM(nodeName, newHostName, newHostPort);
|
95
|
46
|
161
|
47 TopologyDataGear topoDG = new TopologyDataGear();
|
|
48 topoDG.setNodeName(nodeName);
|
|
49
|
|
50 getDGM(nodeName).put("topoDG", topoDG);
|
83
|
51 getDGM(nodeName).put("cookie", MD5);
|
|
52
|
|
53 absCookieTable.put(MD5, nodeName);
|
129
|
54 getLocalDGM().put("absCookieTable", absCookieTable);
|
|
55
|
83
|
56 getLocalDGM().put("hostCount", hostCount + 1);
|
94
|
57 newHost.setAlive(true);
|
83
|
58 nameTable.put(nodeName, newHost);
|
|
59 parentManager.register(nodeName);
|
|
60
|
|
61 if (hostCount == 0) {
|
|
62 // どこにも繋がれるところがないので, ルートのとき.
|
|
63 } else {
|
|
64 // put parent information own
|
|
65 String parentNodeName = parentManager.getMyParent();
|
129
|
66 HostMessage parentHost = nameTable.get(parentNodeName).clone();
|
|
67
|
83
|
68
|
94
|
69 // 相手からhostNameとportはもらっているので, nodeの情報だけ与えれば良い.
|
114
|
70 parentHost.setNodeInfo(nodeName, "parent", parentNodeName);
|
129
|
71 //parentHost.setNodeInfo(parentNodeName, "child", nodeName);
|
94
|
72 getLocalDGM().put("nodeInfo", parentHost);
|
158
|
73 getDGM(nodeName).put("remoteNodeInfo", parentHost);
|
83
|
74 cgm.setup(new RecordTopology());
|
|
75
|
94
|
76 // newChildHost, newHostも同じ
|
114
|
77 newHost.setNodeInfo(parentNodeName, "child" + parentManager.getMyNumber(), nodeName);
|
94
|
78 getLocalDGM().put("nodeInfo", newHost);
|
158
|
79 getDGM(parentNodeName).put("remoteNodeInfo", newHost);
|
83
|
80 cgm.setup(new RecordTopology());
|
|
81 }
|
85
|
82
|
129
|
83 getLocalDGM().put("nameTable", nameTable);
|
|
84 getLocalDGM().put("parentManager", parentManager);
|
|
85
|
176
|
86 getDGM(nodeName).put("connectNodeNum", 1);
|
198
|
87 //getDGM(nodeName).put("remoteNodeInfo", new HostMessage());
|
176
|
88 getDGM(nodeName).put("_CONNECTIONMESSAGE", new Message());
|
|
89 getDGM(nodeName).put("_STARTMESSAGE", new Message());
|
100
|
90 getLocalDGM().put("startTime", System.currentTimeMillis());
|
85
|
91
|
92
|
92 cgm.setup(new CreateTreeTopology());
|
83
|
93 }
|
|
94 } |