Mercurial > hg > Members > nobuyasu > tightVNCProxy
annotate src/myVncProxy/AcceptClient.java @ 172:54ad8e0654b5
remove error
author | Yu Taninari <you@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 21 Oct 2011 17:06:23 +0900 |
parents | ffc16faf011a |
children | eea9a1726edf |
rev | line source |
---|---|
73 | 1 package myVncProxy; |
2 | |
3 import java.net.Socket; | |
169 | 4 import java.net.UnknownHostException; |
73 | 5 import java.io.*; |
6 import java.net.*; | |
7 import java.util.*; | |
8 | |
139 | 9 public class AcceptClient { |
115
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
10 int counter = 0, parentnum = 0/* 落ちたときの親の番号をカウントするためのもの */; |
73 | 11 LinkedList<String> ls = new LinkedList<String>(); |
115
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
12 boolean runflag = false; |
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
13 private String name; |
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
14 boolean addrRegistor = true; |
148 | 15 int passCheck = 0; |
169 | 16 int treebranch = 2;// treeの子ノードの数 |
17 String newparent,request,myAddress; | |
18 String leaderflag = "0", sendleaderflag = "0"; | |
19 int intv_time = 100; | |
20 | |
73 | 21 |
171 | 22 |
169 | 23 public AcceptClient(String name) { |
24 this.name = name; | |
73 | 25 } |
115
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
26 |
170 | 27 |
73 | 28 public AcceptClient() { |
29 new CreateThread(this); | |
30 } | |
115
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
31 |
118 | 32 // public synchronized void transferParentAddrerss(BufferedReader |
33 // is,PrintStream os) { | |
115
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
34 public synchronized void transferParentAddrerss(BufferedReader is,PrintStream os) { |
169 | 35 // クライアントからのメッセージを待ち、受け取ったメッセージをそのまま返す |
36 try { | |
37 while (true) { | |
38 String line = is.readLine(); | |
39 String port = is.readLine(); | |
40 myAddress = getMyAddress(); | |
41 if ("1".equals(line)) { | |
42 replyLeaderNode(os, is, port); | |
43 } else if ("2".equals(line)) { | |
44 replyNodeInformation(port); | |
45 listupdate(port, newparent); | |
46 outputStream(os, newparent, String.valueOf(parentnum), | |
47 port, leaderflag); | |
48 os.close(); | |
49 is.close(); | |
50 } else if ("3".equals(line)) { | |
51 replyNormalChildren(os, is, port); | |
52 line = null; | |
53 } else { | |
54 if(replyCreateTree(os, is, port, line)) { | |
55 break; | |
115
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
56 } |
118 | 57 } |
169 | 58 } |
59 } catch (IOException e) { | |
60 System.out.println(e); | |
61 } catch (InterruptedException e) { | |
62 e.printStackTrace(); | |
63 } | |
73 | 64 } |
115
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
65 |
73 | 66 /** |
67 * @param port | |
115
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
68 * parent value |
73 | 69 */ |
70 void listupdate(String port) { | |
71 ls.remove(Integer.parseInt(port)); | |
115
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
72 ls.add(Integer.parseInt(port), ls.getLast()); |
73 | 73 ls.removeLast(); |
74 } | |
172 | 75 |
76 void listupdate(String port,String myaddr) { | |
77 ls.remove(Integer.parseInt(port)); | |
78 ls.add(Integer.parseInt(port), myaddr); | |
79 ls.removeLast(); | |
80 } | |
73 | 81 |
115
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
82 void outputStream(PrintStream os, String request, String parentnum, |
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
83 String treenum, String leaderflag) { |
73 | 84 os.println(request); |
85 os.println(parentnum); | |
74 | 86 os.println(treenum); |
73 | 87 os.println(leaderflag); |
88 } | |
115
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
89 |
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
90 void checkParameter(int parent, int counter, String leaderflag) { |
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
91 System.out.println("pの値=" + parentnum); |
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
92 System.out.println("iの値=" + counter); |
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
93 System.out.println("leaderflag=" + leaderflag + "\n"); |
73 | 94 } |
115
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
95 |
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
96 void addClientAdress(String line, LinkedList<String> ls) { |
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
97 if (line != null) { |
73 | 98 ls.add(line); |
99 } | |
169 | 100 displyLinkedList(ls); |
101 } | |
102 | |
103 void displyLinkedList( LinkedList<String> ls) { | |
104 int g = 0; | |
115
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
105 for (String bs : ls) { |
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
106 System.out.println(g + "番目" + bs); |
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
107 g++; |
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
108 } |
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
109 } |
73 | 110 |
115
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
111 String decisionLeader(int counter, int treebranch) { |
158 | 112 if ((counter - 1) % treebranch == 1) { // children in most young treenum |
113 // have leaderflag 1 other 0 | |
114 return "0"; | |
115 } else { | |
148 | 116 return "1"; |
158 | 117 } |
73 | 118 } |
169 | 119 |
120 String getMyAddress () throws UnknownHostException { | |
121 InetAddress addr = InetAddress.getLocalHost(); | |
122 return new String(addr.getHostAddress()); | |
123 } | |
124 | |
125 void replyNodeInformation (String port) { | |
126 parentnum = (Integer.parseInt(port) - 1) / treebranch; | |
127 newparent = ls.get(parentnum); | |
128 sendleaderflag = decisionLeader(Integer.parseInt(port), treebranch); | |
129 leaderflag = decisionLeader(Integer.parseInt(port),treebranch); | |
130 } | |
131 | |
132 void replyLeaderNode(PrintStream os,BufferedReader is,String port) throws IOException, InterruptedException { | |
133 String checkRepetition = is.readLine(); | |
134 os.println(ls.getLast()); | |
135 replyNodeInformation(port); | |
136 counter--; | |
137 passCheck = 1; | |
138 Child report = new Child(); | |
139 report.reportLastNode(ls.getLast(), newparent,port, String.valueOf(parentnum), | |
140 sendleaderflag, counter); | |
141 listupdate(port); | |
142 displyLinkedList(ls); | |
143 os.println(port); | |
144 runflag = true; | |
145 leaderflag = decisionLeader( | |
146 Integer.parseInt(checkRepetition), | |
147 treebranch); | |
148 if (Integer.parseInt(checkRepetition) == counter + 1) { | |
149 checkRepetition = "stop"; | |
150 } else { | |
151 checkRepetition = "go"; | |
152 } | |
153 os.println(checkRepetition); | |
154 Thread.sleep(intv_time); | |
155 is.close(); | |
156 os.close(); | |
157 } | |
158 | |
159 void replyNormalChildren(PrintStream os,BufferedReader is,String port) throws IOException { | |
160 String checkRepetition = is.readLine(); | |
161 System.out.println("落ちたのを確認しました"); | |
162 | |
163 os.println(ls.get(Integer.parseInt(port))); | |
164 os.println(port); | |
165 | |
166 | |
167 if(ls.size()-1+passCheck == Integer.parseInt(checkRepetition)) { | |
168 checkRepetition = "skip"; | |
169 } | |
170 passCheck = 0; | |
171 | |
172 os.println(checkRepetition); | |
173 | |
174 System.out.println("num4=" | |
175 + ls.get(Integer.parseInt(port))); | |
176 | |
177 runflag = false; | |
178 is.close(); | |
179 os.close(); | |
180 } | |
181 | |
182 boolean replyCreateTree(PrintStream os,BufferedReader is,String port,String line) throws InterruptedException { | |
183 if (addrRegistor == true) { | |
184 ls.add(myAddress); | |
185 addrRegistor = false; | |
186 } | |
187 | |
188 if (line != null) { | |
189 addClientAdress(line, ls); | |
190 counter++; | |
191 } else { | |
192 return true; | |
193 } | |
194 | |
195 if (counter >= treebranch + 1) { | |
196 leaderflag = decisionLeader(counter, treebranch); | |
197 parentnum = (counter - 1) / treebranch; | |
198 request = ls.get(parentnum); | |
199 System.out.println(parentnum); | |
200 outputStream(os, request,String.valueOf(parentnum), | |
201 String.valueOf(counter), leaderflag); | |
202 checkParameter(parentnum, counter, leaderflag); | |
203 } else { | |
204 // treeの親ノードに接続する人に接続する人を教える | |
205 outputStream(os, myAddress, "0", | |
206 String.valueOf(counter), leaderflag); | |
207 } | |
208 Thread.sleep(intv_time); | |
209 return false; | |
210 } | |
115
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
211 |
73 | 212 } |
213 | |
115
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
214 class Child { |
73 | 215 |
115
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
216 void reportLastNode(String hiddenchild, String newparent, |
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
217 String newtreenum, String newpnum, String newleaderflag, int i) |
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
218 throws IOException { |
73 | 219 try { |
220 Socket echoSocket; | |
221 System.out.println(hiddenchild + "に接続します"); | |
115
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
222 echoSocket = new Socket(hiddenchild, 10001 + (i + 1));// i+1は実験中に同じマシーンを使っていたのでportを変えて対応、本番時には取り除く予定。 |
73 | 223 |
115
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
224 DataOutputStream os = new DataOutputStream( |
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
225 echoSocket.getOutputStream()); |
73 | 226 |
115
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
227 os.writeBytes(newparent + "\n"); |
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
228 os.writeBytes(newpnum + "\n"); |
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
229 os.writeBytes(newtreenum + "\n"); |
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
230 os.writeBytes(newleaderflag + "\n"); |
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
231 |
74 | 232 os.close(); |
73 | 233 } catch (UnknownHostException e) { |
234 System.err.println("Don't know about host: localhost"); | |
235 } catch (IOException e) { | |
115
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
236 System.err |
7d9e9dfd7eb8
modify AcceptClient.java
Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
parents:
74
diff
changeset
|
237 .println("Couldn't get I/O for the connection to: localhost"); |
73 | 238 } |
239 | |
240 } | |
241 } |