Mercurial > hg > Members > nobuyasu > tightVNCProxy
comparison src/myVncProxy/acceptClient.java @ 49:5953ac30cb20
add acceptClient.java
author | e085711 |
---|---|
date | Wed, 06 Jul 2011 11:56:40 +0900 |
parents | |
children | 4864a7d1df00 925d8b3eecd5 |
comparison
equal
deleted
inserted
replaced
48:1ad24c0af09e | 49:5953ac30cb20 |
---|---|
1 package myVncProxy; | |
2 | |
3 import java.net.Socket; | |
4 import java.io.*; | |
5 import java.net.*; | |
6 import java.util.*; | |
7 | |
8 public class acceptClient extends Thread { | |
9 ServerSocket echoServer=null; | |
10 // ソケットや入出力用のストリームの宣言 | |
11 String line,port,handover; | |
12 BufferedReader is; | |
13 PrintStream os; | |
14 Socket clientSocket = null; | |
15 int intv_time = 100; | |
16 int i = 0 , p = 0,t = 0; | |
17 //String[] sub = new String[100]; | |
18 LinkedList<String> ls = new LinkedList<String>(); | |
19 String request,name; | |
20 int treebranch = 2;//treeの子ノードの数 | |
21 String leaderflag="0",sendleaderflag="0"; | |
22 boolean runflag =false,addrRegistor=true; | |
23 BufferedReader temp = null;//一時的にisを保存する変数 | |
24 | |
25 | |
26 public acceptClient(String _name) { | |
27 // TODO Auto-generated constructor stub | |
28 name = _name; | |
29 } | |
30 | |
31 | |
32 public void run() { | |
33 | |
34 while(true){ | |
35 // ポート9999番を開く | |
36 try { | |
37 echoServer = new ServerSocket(9999); | |
38 } | |
39 catch (IOException e) { | |
40 System.out.println(e); | |
41 } | |
42 | |
43 // クライアントからの要求を受けるソケットを開く | |
44 try { | |
45 clientSocket = echoServer.accept(); | |
46 is = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); | |
47 os = new PrintStream(clientSocket.getOutputStream()); | |
48 | |
49 // クライアントからのメッセージを待ち、受け取ったメッセージをそのまま返す | |
50 while (true){ | |
51 /* | |
52 if(runflag==false){ | |
53 temp = is; | |
54 line = is.readLine(); | |
55 port = is.readLine(); | |
56 }else{ | |
57 if(temp!=null){ | |
58 is = temp; | |
59 } | |
60 */ | |
61 line = is.readLine(); | |
62 port = is.readLine(); | |
63 //} | |
64 System.out.println("データーを受信しましたlin="+line+" port="+port); | |
65 //自分の IPADRESSを取得する | |
66 InetAddress addr = InetAddress.getLocalHost(); | |
67 String add = new String(addr.getHostAddress()); | |
68 | |
69 if("1".equals(line)){ | |
70 System.out.println("親が落ちましたmessage" + port); | |
71 os.println(ls.getLast()); | |
72 handover= String.valueOf((Integer.parseInt(port) - 1) / treebranch); | |
73 String hidenchild=ls.getLast(); | |
74 String newparent=ls.get(Integer.parseInt(handover)); | |
75 ls.remove(Integer.parseInt(port)); | |
76 ls.add(Integer.parseInt(port),ls.getLast()); | |
77 ls.remove(Integer.parseInt(port)); | |
78 i--; | |
79 t++; | |
80 runflag = true; | |
81 if(t % treebranch == 0){ | |
82 p--; | |
83 } | |
84 if((i-1)%treebranch==1){ | |
85 sendleaderflag = "1"; | |
86 }else{ | |
87 sendleaderflag = "0"; | |
88 } | |
89 /* | |
90 if(temp!=null){ | |
91 System.out.println("leaderに返信します"); | |
92 is =temp; | |
93 line = is.readLine(); | |
94 port = is.readLine(); | |
95 os.println(ls.get(Integer.parseInt(port))); | |
96 os.println(port); | |
97 runflag=false; | |
98 temp=null; | |
99 } | |
100 */ | |
101 | |
102 child child = new child(); | |
103 child.clost(hidenchild,newparent,os,port,handover,sendleaderflag,i); | |
104 os.println(port); | |
105 Thread.sleep(intv_time); | |
106 is.close(); | |
107 os.close(); | |
108 | |
109 }else if("2".equals(line)){ | |
110 System.out.println("子供が落ちましたmessage" + port); | |
111 //exit シグナルを送る | |
112 Thread.sleep(intv_time); | |
113 }else if("3".equals(line)){ | |
114 System.out.println("落ちたのを確認しました"); | |
115 | |
116 os.println(ls.get(Integer.parseInt(port))); | |
117 os.println(port); | |
118 line=null; | |
119 runflag = false; | |
120 is.close(); | |
121 os.close(); | |
122 }else{ | |
123 if(addrRegistor==true){ | |
124 ls.add(add); | |
125 addrRegistor = false; | |
126 } | |
127 System.out.println(p); | |
128 if(line != null){ | |
129 sock conf = new sock(); | |
130 conf.arg(line,ls); | |
131 i++; | |
132 }else{ | |
133 break; | |
134 } | |
135 | |
136 if(i>=treebranch+1){ | |
137 if((i-1)%treebranch==0){ | |
138 leaderflag = "1"; | |
139 }else{ | |
140 leaderflag = "0"; | |
141 } | |
142 if((i-1)%treebranch==0){ | |
143 p++; | |
144 } | |
145 // request = [p-1]; | |
146 request = ls.get(p); | |
147 os.println(request); | |
148 System.out.println("pの値="+p); | |
149 os.println(String.valueOf(p)); | |
150 System.out.println("iの値="+i); | |
151 os.println(String.valueOf(i)); | |
152 System.out.println("leaderflag="+leaderflag + "\n"); | |
153 os.println(leaderflag); | |
154 }else{ | |
155 //treeの親ノードに接続する人に接続する人を教える | |
156 | |
157 os.println(add);//あとで渡されたmainArgs[1](現在はname)を渡す予定 | |
158 os.println("0"); | |
159 os.println(String.valueOf(i)); | |
160 os.println(leaderflag + "\n"); | |
161 } | |
162 Thread.sleep(intv_time); | |
163 } | |
164 } | |
165 }catch (IOException e){ | |
166 System.out.println(e); | |
167 } | |
168 catch(InterruptedException e){ | |
169 e.printStackTrace(); | |
170 } | |
171 try{ | |
172 echoServer.close(); | |
173 } | |
174 catch (IOException e){ | |
175 System.out.println(e); | |
176 } | |
177 } | |
178 } | |
179 } | |
180 | |
181 | |
182 class sock{ | |
183 void arg(String line,LinkedList<String> ls){ | |
184 if(line != null){ | |
185 ls.add(line); | |
186 } | |
187 int g=0; | |
188 | |
189 for(String bs: ls){ | |
190 System.out.println(g+"番目"+bs); | |
191 g++; | |
192 } | |
193 } | |
194 } | |
195 | |
196 class child{ | |
197 Socket echoSocket; | |
198 DataOutputStream os = null; | |
199 BufferedReader is = null; | |
200 void clost(String hiddenchild,String newparent,PrintStream rep,String newtreenum,String newpnum,String newleaderflag,int i) throws IOException{ | |
201 try { | |
202 | |
203 System.out.println(hiddenchild + "に接続します"); | |
204 echoSocket = new Socket(hiddenchild, 10001 + (i + 1));//i+1は実験中に同じマシーンを使っていたのでportを変えて対応、本番時には取り除く予定。 | |
205 | |
206 os = new DataOutputStream(echoSocket.getOutputStream()); | |
207 is = new BufferedReader(new InputStreamReader(echoSocket.getInputStream())); | |
208 | |
209 os.writeBytes(newparent+"\n"); | |
210 os.writeBytes(newpnum+"\n"); | |
211 os.writeBytes(newtreenum+"\n"); | |
212 os.writeBytes(newleaderflag+"\n"); | |
213 | |
214 /* | |
215 rep.println(newparent); | |
216 rep.println(newpnum); | |
217 rep.println(newtreenum); | |
218 rep.println(newleaderflag+"\n"); | |
219 | |
220 rep.close(); | |
221 */ | |
222 } catch (UnknownHostException e) { | |
223 System.err.println("Don't know about host: localhost"); | |
224 } catch (IOException e) { | |
225 System.err.println("Couldn't get I/O for the connection to: localhost"); | |
226 } | |
227 | |
228 } | |
229 } |