annotate src/main/java/jp/ac/u_ryukyu/treevnc/TreeManagement.java @ 427:ed15f0bd8dfa

Remove shareScrrenNumber for ScreenChangeRequest Message
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Mon, 01 Feb 2016 04:39:53 +0900
parents ffe01c959cdd
children b5459c7c8e4d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
206
2b3eb4a9492f MyRfbProto reorganization
oc
parents: 195
diff changeset
1 package jp.ac.u_ryukyu.treevnc;
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
153
e68dfd1972ac fix bad names.
oc
parents: 147
diff changeset
3
e68dfd1972ac fix bad names.
oc
parents: 147
diff changeset
4 import java.io.IOException;
208
f1d7cb4a1868 compute netmask and netaddress
oc
parents: 206
diff changeset
5 import java.net.InetAddress;
337
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
6 import java.net.UnknownHostException;
153
e68dfd1972ac fix bad names.
oc
parents: 147
diff changeset
7 import java.util.LinkedList;
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8
153
e68dfd1972ac fix bad names.
oc
parents: 147
diff changeset
9 public class TreeManagement {
188
f176bffcdc4a add showTreeNode option.
oc
parents: 178
diff changeset
10
231
0e0e6744432c get new nodeList for checkDelay.
oc
parents: 223
diff changeset
11 public LinkedList<TreeVNCNode> nodeList = new LinkedList<TreeVNCNode>();
223
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
12 boolean runflag = false;
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
13 private final int treebranch = 2;
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
14 private boolean showTreeNode = false;
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
15 private byte[] netmask;
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
16 private byte[] netaddress;
188
f176bffcdc4a add showTreeNode option.
oc
parents: 178
diff changeset
17
223
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
18 public TreeManagement(String hostName, int vncport, boolean showTree) {
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
19 TreeVNCNode me = new TreeVNCNode(hostName, vncport,"localhost");
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
20 showTreeNode = showTree;
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
21 me.setTreeNum(0);
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
22 nodeList.add(me);
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
23 }
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
24
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
25 //
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
26 // private boolean checkAddress(String line) {
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
27 // String test[] = line.split("\\.");
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
28 // int a = Integer.parseInt(test[0]);
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
29 // int b = Integer.parseInt(test[1]);
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
30 // if ((192 == a && b == 168) || (172 == a && (b > 15 || b < 32))
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
31 // || 10 == a) {
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
32 // return true;
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
33 // } else {
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
34 // return false;
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
35 // }
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
36 // }
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37
138
c3761c896607 minor fix
oc
parents: 136
diff changeset
38
223
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
39 /**
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
40 * a parent is lost, remove from the list and move last one into here
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
41 * @param nodeNum
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
42 * parent value
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
43 */
418
0543c380308c Move bottleneck Node to outside node list
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 342
diff changeset
44 public void moveLastNodeToLostNodePosition(int nodeNum) {
223
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
45 nodeList.remove(nodeNum);
328
1a2ab6bd5ba3 add function lost child node, remove deadChild nodeList.
oc
parents: 251
diff changeset
46 if (nodeNum != nodeList.size()) {
1a2ab6bd5ba3 add function lost child node, remove deadChild nodeList.
oc
parents: 251
diff changeset
47 TreeVNCNode node = nodeList.removeLast();
1a2ab6bd5ba3 add function lost child node, remove deadChild nodeList.
oc
parents: 251
diff changeset
48 node.setTreeNum(nodeNum);
1a2ab6bd5ba3 add function lost child node, remove deadChild nodeList.
oc
parents: 251
diff changeset
49 nodeList.add(nodeNum, node);
1a2ab6bd5ba3 add function lost child node, remove deadChild nodeList.
oc
parents: 251
diff changeset
50 }
223
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
51 }
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52
223
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
53 private void checkParameter(int parent, int counter, int leaderflag2) {
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
54 System.out.print("number p =" + parent);
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
55 System.out.print(" number i =" + counter);
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
56 System.out.println(" leaderflag=" + leaderflag2 + "\n");
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
57 }
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
58
223
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
59 private TreeVNCNode getParentNode(int nodeNum) {
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
60 int parentnum = (nodeNum - 1) / treebranch;
135
ada4d850a820 lostParent and notFoundParenet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
61 return nodeList.get(parentnum);
223
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
62 }
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
63
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
64
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
65 public TreeVNCNode getChildNode(TreeVNCNode newparent, int i) {
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
66 int child = newparent.getTreeNum() * treebranch + i + 1;
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
67 if (child >= nodeList.size()) {
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
68 return(null);
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
69 } else {
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
70 return(nodeList.get(child));
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
71 }
328
1a2ab6bd5ba3 add function lost child node, remove deadChild nodeList.
oc
parents: 251
diff changeset
72 }
223
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
73
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
74 /**
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
75 * A parent is lost, move last node which has no child to the position
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
76 * @param hostname
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
77 * @param port
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
78 * @param myHostName
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
79 */
195
a204b53a30c7 set connectTo localhostname.
oc
parents: 188
diff changeset
80 public void fixLostParent(String hostname, int port, String myHostName) {
136
81b558b38b9f reconnection
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 135
diff changeset
81 TreeVNCNode lostParentNode = lookup(nodeList,hostname,port);
328
1a2ab6bd5ba3 add function lost child node, remove deadChild nodeList.
oc
parents: 251
diff changeset
82 if (lostParentNode == null ) return; // something wrong
136
81b558b38b9f reconnection
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 135
diff changeset
83 int treeNumber = lostParentNode.getTreeNum();
172
73c42f9d04a8 fix send connectTo command when lostNodeConnection.
oc
parents: 169
diff changeset
84 TreeVNCNode deadParent = getParentNode(treeNumber);
223
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
85 TreeVNCNode me = nodeList.getFirst();
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
86 me.setHostName(myHostName);
173
70068c2642de fix lostParent.
oc
parents: 172
diff changeset
87 if (deadParent.getTreeNum() == 0) {
223
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
88 // if dead root, connect me.
337
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
89 try {
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
90 connectTo(me, lostParentNode);
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
91 } catch (IOException e) {
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
92 e.printStackTrace();
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
93 }
223
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
94 return;
173
70068c2642de fix lostParent.
oc
parents: 172
diff changeset
95 }
70068c2642de fix lostParent.
oc
parents: 172
diff changeset
96 if (getChildNode(deadParent, 0) == null) return;
172
73c42f9d04a8 fix send connectTo command when lostNodeConnection.
oc
parents: 169
diff changeset
97 moveLastNodeToLostNodePosition(deadParent.getTreeNum());
73c42f9d04a8 fix send connectTo command when lostNodeConnection.
oc
parents: 169
diff changeset
98 lostNodeConnection(deadParent);
136
81b558b38b9f reconnection
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 135
diff changeset
99 // if lostParentNode is the last one, we don't need reconnection
81b558b38b9f reconnection
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 135
diff changeset
100 // Thread.sleep(intv_time);
81b558b38b9f reconnection
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 135
diff changeset
101 }
54
0ae87c7e767c bug fix
one
parents: 53
diff changeset
102
328
1a2ab6bd5ba3 add function lost child node, remove deadChild nodeList.
oc
parents: 251
diff changeset
103 public void fixLostChild(String hostname, int port, String myHostName, int clientId) {
1a2ab6bd5ba3 add function lost child node, remove deadChild nodeList.
oc
parents: 251
diff changeset
104 TreeVNCNode lostChildNode = lookup(nodeList, hostname, port);
1a2ab6bd5ba3 add function lost child node, remove deadChild nodeList.
oc
parents: 251
diff changeset
105 if (lostChildNode == null) return;
334
dff2f92ae3ff change lost left/right child to lost child.
oc
parents: 333
diff changeset
106 int lostChildNodeNum;
dff2f92ae3ff change lost left/right child to lost child.
oc
parents: 333
diff changeset
107 // if isTreeManager
dff2f92ae3ff change lost left/right child to lost child.
oc
parents: 333
diff changeset
108 if (lostChildNode.getTreeNum() == 0) {
dff2f92ae3ff change lost left/right child to lost child.
oc
parents: 333
diff changeset
109 lostChildNodeNum = clientId + 1;
dff2f92ae3ff change lost left/right child to lost child.
oc
parents: 333
diff changeset
110 } else {
dff2f92ae3ff change lost left/right child to lost child.
oc
parents: 333
diff changeset
111 lostChildNodeNum = (lostChildNode.getTreeNum() * treebranch) + clientId + 1;
dff2f92ae3ff change lost left/right child to lost child.
oc
parents: 333
diff changeset
112 }
dff2f92ae3ff change lost left/right child to lost child.
oc
parents: 333
diff changeset
113 TreeVNCNode deadChild;
423
ffe01c959cdd Fix LostChild for root node
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 418
diff changeset
114 fixLostChild1(lostChildNodeNum);
136
81b558b38b9f reconnection
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 135
diff changeset
115 }
54
0ae87c7e767c bug fix
one
parents: 53
diff changeset
116
427
ed15f0bd8dfa Remove shareScrrenNumber for ScreenChangeRequest Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 423
diff changeset
117 public void fixLostChild1(int nodeNum) {
ed15f0bd8dfa Remove shareScrrenNumber for ScreenChangeRequest Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 423
diff changeset
118 TreeVNCNode deadNode;
ed15f0bd8dfa Remove shareScrrenNumber for ScreenChangeRequest Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 423
diff changeset
119 try {
ed15f0bd8dfa Remove shareScrrenNumber for ScreenChangeRequest Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 423
diff changeset
120 deadNode = nodeList.get(nodeNum);
ed15f0bd8dfa Remove shareScrrenNumber for ScreenChangeRequest Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 423
diff changeset
121 } catch (IndexOutOfBoundsException e) {
ed15f0bd8dfa Remove shareScrrenNumber for ScreenChangeRequest Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 423
diff changeset
122 // this node became new node instead of deathChild.
ed15f0bd8dfa Remove shareScrrenNumber for ScreenChangeRequest Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 423
diff changeset
123 deadNode = null;
ed15f0bd8dfa Remove shareScrrenNumber for ScreenChangeRequest Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 423
diff changeset
124 }
ed15f0bd8dfa Remove shareScrrenNumber for ScreenChangeRequest Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 423
diff changeset
125 if (deadNode != null) {
ed15f0bd8dfa Remove shareScrrenNumber for ScreenChangeRequest Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 423
diff changeset
126 moveLastNodeToLostNodePosition(deadNode.getTreeNum());
ed15f0bd8dfa Remove shareScrrenNumber for ScreenChangeRequest Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 423
diff changeset
127 lostNodeConnection(deadNode);
ed15f0bd8dfa Remove shareScrrenNumber for ScreenChangeRequest Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 423
diff changeset
128 }
ed15f0bd8dfa Remove shareScrrenNumber for ScreenChangeRequest Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 423
diff changeset
129 if (showTreeNode) {
ed15f0bd8dfa Remove shareScrrenNumber for ScreenChangeRequest Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 423
diff changeset
130 showTreeNode();
ed15f0bd8dfa Remove shareScrrenNumber for ScreenChangeRequest Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 423
diff changeset
131 }
ed15f0bd8dfa Remove shareScrrenNumber for ScreenChangeRequest Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 423
diff changeset
132 }
ed15f0bd8dfa Remove shareScrrenNumber for ScreenChangeRequest Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 423
diff changeset
133
331
42fcc9419498 add error message, add lostParent case by fail to connectTo.
oc
parents: 329
diff changeset
134 /**
42fcc9419498 add error message, add lostParent case by fail to connectTo.
oc
parents: 329
diff changeset
135 * send reconnect to all children
42fcc9419498 add error message, add lostParent case by fail to connectTo.
oc
parents: 329
diff changeset
136 * @param deadNode
42fcc9419498 add error message, add lostParent case by fail to connectTo.
oc
parents: 329
diff changeset
137 */
418
0543c380308c Move bottleneck Node to outside node list
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 342
diff changeset
138 public void lostNodeConnection(TreeVNCNode deadNode) {
331
42fcc9419498 add error message, add lostParent case by fail to connectTo.
oc
parents: 329
diff changeset
139 if (nodeList.size() < deadNode.getTreeNum()+1) {
42fcc9419498 add error message, add lostParent case by fail to connectTo.
oc
parents: 329
diff changeset
140 return;
42fcc9419498 add error message, add lostParent case by fail to connectTo.
oc
parents: 329
diff changeset
141 }
333
1be15ac758b4 rename value in lostNodeConnection, add comment.
oc
parents: 331
diff changeset
142 TreeVNCNode newNode = nodeList.get(deadNode.getTreeNum());
1be15ac758b4 rename value in lostNodeConnection, add comment.
oc
parents: 331
diff changeset
143 TreeVNCNode parentNode = getParentNode(newNode.getTreeNum());
1be15ac758b4 rename value in lostNodeConnection, add comment.
oc
parents: 331
diff changeset
144 // new node connect to parent node.
337
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
145 try {
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
146 connectTo(parentNode, newNode);
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
147 } catch (IOException e) {
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
148 e.printStackTrace();
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
149 }
333
1be15ac758b4 rename value in lostNodeConnection, add comment.
oc
parents: 331
diff changeset
150 // if children node exist, children connect to new node.
331
42fcc9419498 add error message, add lostParent case by fail to connectTo.
oc
parents: 329
diff changeset
151 for(int i=0; i < treebranch; i++) {
333
1be15ac758b4 rename value in lostNodeConnection, add comment.
oc
parents: 331
diff changeset
152 TreeVNCNode child = getChildNode(newNode, i);
331
42fcc9419498 add error message, add lostParent case by fail to connectTo.
oc
parents: 329
diff changeset
153 if (child != null) {
337
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
154 try {
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
155 connectTo(newNode, child);
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
156 } catch (IOException e) {
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
157 e.printStackTrace();
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
158 }
331
42fcc9419498 add error message, add lostParent case by fail to connectTo.
oc
parents: 329
diff changeset
159 }
42fcc9419498 add error message, add lostParent case by fail to connectTo.
oc
parents: 329
diff changeset
160 }
42fcc9419498 add error message, add lostParent case by fail to connectTo.
oc
parents: 329
diff changeset
161 }
173
70068c2642de fix lostParent.
oc
parents: 172
diff changeset
162
337
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
163 public void connectTo(TreeVNCNode newparent, TreeVNCNode n) throws IOException {
223
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
164 TreeVncProtocol vc1 = new TreeVncProtocol(n.getHostname(),n.getPort());
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
165 short nodeId = (short) n.getTreeNum();
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
166 vc1.connectTo(newparent.getHostname(), newparent.getPort(), isLeader(n), nodeId);
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
167 }
173
70068c2642de fix lostParent.
oc
parents: 172
diff changeset
168
136
81b558b38b9f reconnection
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 135
diff changeset
169 private int isLeader(TreeVNCNode n) {
81b558b38b9f reconnection
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 135
diff changeset
170 return ( n.getTreeNum() % treebranch == 1) ? 1 : 0;
81b558b38b9f reconnection
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 135
diff changeset
171 }
81b558b38b9f reconnection
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 135
diff changeset
172
81b558b38b9f reconnection
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 135
diff changeset
173 private TreeVNCNode lookup(LinkedList<TreeVNCNode> list, String hostname, int port) {
223
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
174 for (TreeVNCNode r : list) {
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
175 if (r.getHostname().equals(hostname) && r.getPort() == port )
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
176 return r;
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
177 }
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
178 return null;
136
81b558b38b9f reconnection
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 135
diff changeset
179 }
135
ada4d850a820 lostParent and notFoundParenet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
180
223
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
181 /**
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
182 * Determine tree topology and send CONNECT_TO command
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
183 * @param hostname
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
184 * @param port
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
185 */
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
186 public void decideWhereToConnect(String hostname, int port, String localhostname) {
423
ffe01c959cdd Fix LostChild for root node
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 418
diff changeset
187 TreeVNCNode node = new TreeVNCNode(hostname, port, localhostname);
136
81b558b38b9f reconnection
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 135
diff changeset
188 node.setTreeNum(nodeList.size());
337
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
189
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
190 InetAddress ipAddress = null;
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
191 try {
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
192 ipAddress = InetAddress.getByName(hostname);
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
193 } catch (UnknownHostException e) {
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
194 System.out.println("root : whereToConnect : cannot get ipAddress" + hostname);
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
195 return;
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
196 }
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
197 if (onTheSameNetwork(ipAddress))
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
198 nodeList.add(node);
223
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
199 if (nodeList.size() >= treebranch + 1) {
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
200 TreeVNCNode parent = getParentNode(node.getTreeNum());
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
201 checkParameter(parent.getTreeNum(), nodeList.size(), isLeader(node));
337
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
202 try {
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
203 connectTo(parent, node);
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
204 } catch (IOException e) {
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
205 nodeList.remove(node);
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
206 System.out.println("root : whereToConnect : Connection Faild" + hostname);
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
207 return;
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
208 }
223
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
209 } else {
337
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
210 // connect to me
223
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
211 TreeVNCNode me = nodeList.getFirst();
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
212 me.setHostName(localhostname);
337
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
213 try {
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
214 connectTo(me, node);
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
215 } catch (IOException e) {
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
216 nodeList.remove(node);
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
217 System.out.println("root : whereToConnect : Connection Faild" + hostname);
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
218 return;
c455b05f163b in decideWhereToConnect, host on a different network isn't add to nodeList.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 334
diff changeset
219 }
223
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
220 }
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
221 if (showTreeNode) {
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
222 showTreeNode();
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
223 }
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
224 }
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
225
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
226 /**
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
227 * show Tree Node.
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
228 */
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
229 public void showTreeNode() {
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
230 int nl = 0, pow = 2;
163
c850c2fce039 add showTreeNode method.
oc
parents: 153
diff changeset
231 for (int i=0; i<nodeList.size(); i++) {
223
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
232 TreeVNCNode treeNode = nodeList.get(i);
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
233 System.out.print(treeNode.getTreeNum() + ":" + treeNode.getPort() + ":" + treeNode.getHostname());
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
234 if (i==nl) {
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
235 System.out.println();
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
236 nl = nl + pow;
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
237 pow = pow * pow;
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
238 } else {
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
239 System.out.print(" ");
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
240 }
172
73c42f9d04a8 fix send connectTo command when lostNodeConnection.
oc
parents: 169
diff changeset
241
163
c850c2fce039 add showTreeNode method.
oc
parents: 153
diff changeset
242 }
188
f176bffcdc4a add showTreeNode option.
oc
parents: 178
diff changeset
243 System.out.println();
223
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
244 }
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
245
223
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
246 public LinkedList<TreeVNCNode> getList() {
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
247 return nodeList;
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
248 }
54
0ae87c7e767c bug fix
one
parents: 53
diff changeset
249
223
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
250 public void setList(LinkedList<TreeVNCNode> _ls) {
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
251 nodeList = _ls;
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
252 }
54
0ae87c7e767c bug fix
one
parents: 53
diff changeset
253
223
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
254 public int getTreeBranch() {
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
255 return treebranch;
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
256 }
136
81b558b38b9f reconnection
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 135
diff changeset
257
223
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
258 public void setNetMask(byte[] netmask,byte[] netaddress) {
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
259 this.netmask = netmask;
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
260 this.netaddress = netaddress;
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
261 }
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
262
342
4c670edf3065 fix setting remote id
oc
parents: 337
diff changeset
263 public boolean onTheSameNetwork(InetAddress adr) {
223
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
264 byte [] byteadr = adr.getAddress();
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
265 if (byteadr.length != netmask.length) return false;
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
266 for(int i=0; i < netmask.length; i++) {
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
267 if ((netmask[i] & byteadr[i])!=netaddress[i]) return false;
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
268 }
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
269 return true;
3189e210a7ed indent fix.
oc
parents: 208
diff changeset
270 }
54
0ae87c7e767c bug fix
one
parents: 53
diff changeset
271 }