# HG changeset patch # User Yu Taninari # Date 1310446052 -32400 # Node ID 4864a7d1df003a7c987c1bb50bbb0814383efe6d # Parent 7795e2b5d3ef0be3795b382cb84bc75e60983abd add CreateThread.java modify acceptClient.java and VncProxyService.java diff -r 7795e2b5d3ef -r 4864a7d1df00 src/myVncProxy/CreateThread.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/myVncProxy/CreateThread.java Tue Jul 12 13:47:32 2011 +0900 @@ -0,0 +1,53 @@ +package myVncProxy; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintStream; +import java.net.ServerSocket; +import java.net.Socket; + + + +public class CreateThread extends Thread { + String args; + ServerSocket echoServer; + acceptClient acceptClient; + + + public CreateThread(acceptClient _acc){ + acceptClient = _acc; + } + + + public void run() { + + while (true) { + + try { + echoServer = new ServerSocket(9999); + } + catch (IOException e) { + System.out.println(e); + } + try { + Socket clientSocket = echoServer.accept(); + BufferedReader is = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); + PrintStream os = new PrintStream(clientSocket.getOutputStream()); + acceptClient.gethost(is,os); + } catch (IOException e){ + e.printStackTrace(); + System.out.println(e); + } + try { + echoServer.close(); + } + catch (IOException e){ + System.out.println(e); + } + + } + + } + +} diff -r 7795e2b5d3ef -r 4864a7d1df00 src/myVncProxy/VncProxyService.java --- a/src/myVncProxy/VncProxyService.java Sat Jul 09 14:54:04 2011 +0900 +++ b/src/myVncProxy/VncProxyService.java Tue Jul 12 13:47:32 2011 +0900 @@ -27,7 +27,9 @@ MyRfbProto rfb; Thread rfbThread; Thread accThread; - acceptClient geth; + Thread clientThread; + CreateThread geth; + acceptClient acc; Frame vncFrame; Container vncContainer; @@ -195,8 +197,8 @@ // void connectAndAuthenticate() throws Exception { - - geth = new acceptClient(mainArgs[0]); + acc = new acceptClient(mainArgs[0]); + geth = new CreateThread(acc); geth.start(); diff -r 7795e2b5d3ef -r 4864a7d1df00 src/myVncProxy/acceptClient.java --- a/src/myVncProxy/acceptClient.java Sat Jul 09 14:54:04 2011 +0900 +++ b/src/myVncProxy/acceptClient.java Tue Jul 12 13:47:32 2011 +0900 @@ -6,224 +6,205 @@ import java.util.*; public class acceptClient extends Thread { - ServerSocket echoServer=null; - // ソケットや入出力用のストリームの宣言 - String line,port,handover; - BufferedReader is; - PrintStream os; - Socket clientSocket = null; - int intv_time = 100; - int i = 0 , p = 0,t = 0; - //String[] sub = new String[100]; - LinkedList ls = new LinkedList(); - String request,name; - int treebranch = 2;//treeの子ノードの数 - String leaderflag="0",sendleaderflag="0"; - boolean runflag =false,addrRegistor=true; - BufferedReader temp = null;//一時的にisを保存する変数 - + ServerSocket echoServer=null; + // ソケットや入出力用のストリームの宣言 + String line,port,handover; + BufferedReader is; + PrintStream os; + Socket clientSocket = null; + int intv_time = 100; + int i = 0 , p = 0,t = 0; + //String[] sub = new String[100]; + LinkedList ls = new LinkedList(); + String request,name; + int treebranch = 2;//treeの子ノードの数 + String leaderflag="0",sendleaderflag="0"; + boolean runflag =false,addrRegistor=true; + BufferedReader temp = null;//一時的にisを保存する変数 + CreateThread createThread; - public acceptClient(String _name) { + public acceptClient(String _name) { // TODO Auto-generated constructor stub - name = _name; + name = _name; + } + public acceptClient() { + new CreateThread(this); } - - - public void run() { + + + + public synchronized void gethost(BufferedReader is,PrintStream os) { - while(true){ - // ポート9999番を開く - try { - echoServer = new ServerSocket(9999); - } - catch (IOException e) { - System.out.println(e); - } - - // クライアントからの要求を受けるソケットを開く - try { - clientSocket = echoServer.accept(); - is = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); - os = new PrintStream(clientSocket.getOutputStream()); + //public synchronized void run () { + /* + while(true){ + // ポート9999番を開く + try { + echoServer = new ServerSocket(9999); + } + catch (IOException e) { + System.out.println(e); + } + + // クライアントからの要求を受けるソケットを開く + try { + clientSocket = echoServer.accept(); + is = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); + os = new PrintStream(clientSocket.getOutputStream()); +*/ + // クライアントからのメッセージを待ち、受け取ったメッセージをそのまま返す + try { + while (true){ + line = is.readLine(); + port = is.readLine(); + + System.out.println("データーを受信しましたlin="+line+" port="+port); + //自分の IPADRESSを取得する + InetAddress addr = InetAddress.getLocalHost(); + String add = new String(addr.getHostAddress()); - // クライアントからのメッセージを待ち、受け取ったメッセージをそのまま返す - while (true){ - /* - if(runflag==false){ - temp = is; - line = is.readLine(); - port = is.readLine(); - }else{ - if(temp!=null){ - is = temp; - } - */ - line = is.readLine(); - port = is.readLine(); - //} - System.out.println("データーを受信しましたlin="+line+" port="+port); - //自分の IPADRESSを取得する - InetAddress addr = InetAddress.getLocalHost(); - String add = new String(addr.getHostAddress()); - - if("1".equals(line)){ - System.out.println("親が落ちましたmessage" + port); - os.println(ls.getLast()); - handover= String.valueOf((Integer.parseInt(port) - 1) / treebranch); - String hidenchild=ls.getLast(); - String newparent=ls.get(Integer.parseInt(handover)); - ls.remove(Integer.parseInt(port)); - ls.add(Integer.parseInt(port),ls.getLast()); - ls.remove(Integer.parseInt(port)); - i--; - t++; - runflag = true; - if(t % treebranch == 0){ - p--; - } - if((i-1)%treebranch==1){ - sendleaderflag = "1"; - }else{ - sendleaderflag = "0"; + if("1".equals(line)){ + System.out.println("親が落ちましたmessage" + port); + os.println(ls.getLast()); + handover= String.valueOf((Integer.parseInt(port) - 1) / treebranch); + String hidenchild=ls.getLast(); + String newparent=ls.get(Integer.parseInt(handover)); + ls.remove(Integer.parseInt(port)); + ls.add(Integer.parseInt(port),ls.getLast()); + ls.remove(Integer.parseInt(port)); + i--; + t++; + runflag = true; + if(t % treebranch == 0){ + p--; + } + if((i-1)%treebranch==1){ // children in most young treenum have leaderflag 1 other 0 + sendleaderflag = "1"; + }else{ + sendleaderflag = "0"; + } + + child child = new child(); + child.clost(hidenchild,newparent,os,port,handover,sendleaderflag,i); + os.println(port); + Thread.sleep(intv_time); + is.close(); + os.close(); + + }else if("2".equals(line)){ + System.out.println("子供が落ちましたmessage" + port); + //exit シグナルを送る + Thread.sleep(intv_time); + }else if("3".equals(line)){ + System.out.println("落ちたのを確認しました"); + + os.println(ls.get(Integer.parseInt(port))); + os.println(port); + line=null; + runflag = false; + is.close(); + os.close(); + }else{ + if(addrRegistor==true){ + ls.add(add); + addrRegistor = false; + } + System.out.println(p); + if(line != null){ + sock conf = new sock(); + conf.arg(line,ls); + i++; + }else{ + break; + } + + if(i>=treebranch+1){ + if((i-1)%treebranch==0){ + leaderflag = "1"; + }else{ + leaderflag = "0"; + } + if((i-1)%treebranch==0){ + p++; + } + // request = [p-1]; + request = ls.get(p); + os.println(request); + System.out.println("pの値="+p); + os.println(String.valueOf(p)); + System.out.println("iの値="+i); + os.println(String.valueOf(i)); + System.out.println("leaderflag="+leaderflag + "\n"); + os.println(leaderflag); + }else{ + //treeの親ノードに接続する人に接続する人を教える + + os.println(add);//あとで渡されたmainArgs[1](現在はname)を渡す予定 + os.println("0"); + os.println(String.valueOf(i)); + os.println(leaderflag + "\n"); + } + Thread.sleep(intv_time); + } } - /* - if(temp!=null){ - System.out.println("leaderに返信します"); - is =temp; - line = is.readLine(); - port = is.readLine(); - os.println(ls.get(Integer.parseInt(port))); - os.println(port); - runflag=false; - temp=null; - } - */ - - child child = new child(); - child.clost(hidenchild,newparent,os,port,handover,sendleaderflag,i); - os.println(port); - Thread.sleep(intv_time); - is.close(); - os.close(); - - }else if("2".equals(line)){ - System.out.println("子供が落ちましたmessage" + port); - //exit シグナルを送る - Thread.sleep(intv_time); - }else if("3".equals(line)){ - System.out.println("落ちたのを確認しました"); - - os.println(ls.get(Integer.parseInt(port))); - os.println(port); - line=null; - runflag = false; - is.close(); - os.close(); - }else{ - if(addrRegistor==true){ - ls.add(add); - addrRegistor = false; - } - System.out.println(p); - if(line != null){ - sock conf = new sock(); - conf.arg(line,ls); - i++; - }else{ - break; - } - - if(i>=treebranch+1){ - if((i-1)%treebranch==0){ - leaderflag = "1"; - }else{ - leaderflag = "0"; - } - if((i-1)%treebranch==0){ - p++; - } - // request = [p-1]; - request = ls.get(p); - os.println(request); - System.out.println("pの値="+p); - os.println(String.valueOf(p)); - System.out.println("iの値="+i); - os.println(String.valueOf(i)); - System.out.println("leaderflag="+leaderflag + "\n"); - os.println(leaderflag); - }else{ - //treeの親ノードに接続する人に接続する人を教える - - os.println(add);//あとで渡されたmainArgs[1](現在はname)を渡す予定 - os.println("0"); - os.println(String.valueOf(i)); - os.println(leaderflag + "\n"); - } - Thread.sleep(intv_time); - } - } - }catch (IOException e){ - System.out.println(e); - } - catch(InterruptedException e){ - e.printStackTrace(); - } - try{ - echoServer.close(); - } - catch (IOException e){ - System.out.println(e); - } + + } catch (IOException e){ + System.out.println(e); + } + + catch(InterruptedException e){ + e.printStackTrace(); + } + /* + try{ + echoServer.close(); + } + catch (IOException e){ + System.out.println(e); + } + */ + //} comment out while } - } } class sock{ - void arg(String line,LinkedList ls){ - if(line != null){ - ls.add(line); - } - int g=0; + void arg(String line,LinkedList ls){ + if(line != null){ + ls.add(line); + } + int g=0; - for(String bs: ls){ - System.out.println(g+"番目"+bs); - g++; + for(String bs: ls){ + System.out.println(g+"番目"+bs); + g++; + } } - } } class child{ Socket echoSocket; DataOutputStream os = null; BufferedReader is = null; - void clost(String hiddenchild,String newparent,PrintStream rep,String newtreenum,String newpnum,String newleaderflag,int i) throws IOException{ - try { - - System.out.println(hiddenchild + "に接続します"); - echoSocket = new Socket(hiddenchild, 10001 + (i + 1));//i+1は実験中に同じマシーンを使っていたのでportを変えて対応、本番時には取り除く予定。 + void clost(String hiddenchild,String newparent,PrintStream rep,String newtreenum,String newpnum,String newleaderflag,int i) throws IOException{ + try { + + System.out.println(hiddenchild + "に接続します"); + echoSocket = new Socket(hiddenchild, 10001 + (i + 1));//i+1は実験中に同じマシーンを使っていたのでportを変えて対応、本番時には取り除く予定。 + + os = new DataOutputStream(echoSocket.getOutputStream()); + is = new BufferedReader(new InputStreamReader(echoSocket.getInputStream())); - os = new DataOutputStream(echoSocket.getOutputStream()); - is = new BufferedReader(new InputStreamReader(echoSocket.getInputStream())); - - os.writeBytes(newparent+"\n"); - os.writeBytes(newpnum+"\n"); - os.writeBytes(newtreenum+"\n"); - os.writeBytes(newleaderflag+"\n"); - - /* - rep.println(newparent); - rep.println(newpnum); - rep.println(newtreenum); - rep.println(newleaderflag+"\n"); + os.writeBytes(newparent+"\n"); + os.writeBytes(newpnum+"\n"); + os.writeBytes(newtreenum+"\n"); + os.writeBytes(newleaderflag+"\n"); + + } catch (UnknownHostException e) { + System.err.println("Don't know about host: localhost"); + } catch (IOException e) { + System.err.println("Couldn't get I/O for the connection to: localhost"); + } - rep.close(); - */ - } catch (UnknownHostException e) { - System.err.println("Don't know about host: localhost"); - } catch (IOException e) { - System.err.println("Couldn't get I/O for the connection to: localhost"); - } - - } -} \ No newline at end of file + } +} diff -r 7795e2b5d3ef -r 4864a7d1df00 src/myVncProxy/acceptThread.java --- a/src/myVncProxy/acceptThread.java Sat Jul 09 14:54:04 2011 +0900 +++ b/src/myVncProxy/acceptThread.java Tue Jul 12 13:47:32 2011 +0900 @@ -1,4 +1,5 @@ package myVncProxy; +import java.net.ServerSocket; import java.net.Socket; import java.io.IOException; import java.io.InputStream; @@ -27,3 +28,4 @@ } } } +