comparison src/myVncProxy/acceptClient.java @ 64:3ec4c9e94462

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