# HG changeset patch # User Nobuyasu Oshiro # Date 1311663798 -32400 # Node ID 343e0a107dfc1f780451c16525ff45673f35faa8 # Parent e0fa49a7091b86b682d69580b8b3830499d3eca3# Parent 3ec4c9e944625f5cf29c5146dac31100d87b422b merge diff -r e0fa49a7091b -r 343e0a107dfc src/myVncProxy/CreateThread.java --- a/src/myVncProxy/CreateThread.java Tue Jul 26 15:59:32 2011 +0900 +++ b/src/myVncProxy/CreateThread.java Tue Jul 26 16:03:18 2011 +0900 @@ -9,8 +9,7 @@ -public class CreateThread extends Thread { - String args; +public class CreateThread implements Runnable { ServerSocket echoServer; acceptClient acceptClient; diff -r e0fa49a7091b -r 343e0a107dfc src/myVncProxy/VncProxyService.java --- a/src/myVncProxy/VncProxyService.java Tue Jul 26 15:59:32 2011 +0900 +++ b/src/myVncProxy/VncProxyService.java Tue Jul 26 16:03:18 2011 +0900 @@ -200,7 +200,8 @@ void connectAndAuthenticate() throws Exception { acc = new acceptClient(mainArgs[0]); geth = new CreateThread(acc); - geth.start(); + Thread thread = new Thread(geth); + thread.start(); showConnectionStatus("Initializing..."); diff -r e0fa49a7091b -r 343e0a107dfc src/myVncProxy/acceptClient.java --- a/src/myVncProxy/acceptClient.java Tue Jul 26 15:59:32 2011 +0900 +++ b/src/myVncProxy/acceptClient.java Tue Jul 26 16:03:18 2011 +0900 @@ -6,52 +6,27 @@ 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]; + int counter = 0 , parentnum = 0,t = 0/*落ちたときの親の番号をカウントするためのもの*/; 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; + boolean runflag =false; + private String name; + boolean addrRegistor=true; public acceptClient(String _name) { - // TODO Auto-generated constructor stub name = _name; } public acceptClient() { new CreateThread(this); } - - public synchronized void gethost(BufferedReader is,PrintStream os) { - - //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()); -*/ + String line,port,handover; + int intv_time = 100; + String request; + int treebranch = 2;//treeの子ノードの数 + String leaderflag="0",sendleaderflag="0";//Socket send standardization String + + // クライアントからのメッセージを待ち、受け取ったメッセージをそのまま返す try { while (true){ @@ -66,26 +41,33 @@ if("1".equals(line)){ System.out.println("親が落ちましたmessage" + port); os.println(ls.getLast()); - handover= String.valueOf((Integer.parseInt(port) - 1) / treebranch); + handover = String.valueOf((Integer.parseInt(port) - 1) / treebranch); String hidenchild=ls.getLast(); String newparent=ls.get(Integer.parseInt(handover)); + listupdate(port); + /* ls.remove(Integer.parseInt(port)); ls.add(Integer.parseInt(port),ls.getLast()); ls.remove(Integer.parseInt(port)); - i--; + */ + counter--; t++; runflag = true; + /* if(t % treebranch == 0){ - p--; + parentnum--; } - if((i-1)%treebranch==1){ // children in most young treenum have leaderflag 1 other 0 + */ + parentnum = (Integer.parseInt(port) -1) / treebranch; + + if((counter-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); + child.clost(hidenchild,newparent,port,handover,sendleaderflag,counter); os.println(port); Thread.sleep(intv_time); is.close(); @@ -100,6 +82,12 @@ os.println(ls.get(Integer.parseInt(port))); os.println(port); + int g = 0; + for(String bs: ls){ + System.out.println(g+"番目"+bs); + g++; + } + System.out.println("num4=" + ls.get(Integer.parseInt(port))); line=null; runflag = false; is.close(); @@ -109,40 +97,45 @@ ls.add(add); addrRegistor = false; } - System.out.println(p); + System.out.println(parentnum); if(line != null){ - sock conf = new sock(); - conf.arg(line,ls); - i++; + arg(line,ls); + counter++; }else{ break; } - if(i>=treebranch+1){ - if((i-1)%treebranch==0){ + if(counter>=treebranch+1){ + if((counter-1)%treebranch==0){ leaderflag = "1"; }else{ leaderflag = "0"; } - if((i-1)%treebranch==0){ - p++; + /* + if((counter-1)%treebranch==0){ + parentnum++; } + */ + parentnum = (counter - 1) / treebranch; // request = [p-1]; - request = ls.get(p); + request = ls.get(parentnum); + /* 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(String.valueOf(parentnum)); + os.println(String.valueOf(counter)); os.println(leaderflag); + */ + outputStream(os,request,String.valueOf(parentnum),String.valueOf(counter),leaderflag); + checkParameter(parentnum,counter,leaderflag); }else{ //treeの親ノードに接続する人に接続する人を教える - - os.println(add);//あとで渡されたmainArgs[1](現在はname)を渡す予定 + outputStream(os,name,"0",String.valueOf(counter),leaderflag); + /* + os.println(name);//あとで渡されたmainArgs[1](現在はname)を渡す予定,addに変更 os.println("0"); - os.println(String.valueOf(i)); - os.println(leaderflag + "\n"); + os.println(String.valueOf(counter)); + os.println(leaderflag); + */ } Thread.sleep(intv_time); } @@ -165,11 +158,47 @@ */ //} comment out while } + + /** + * @param port + * parent value + */ + void listupdate(String port) { + ls.remove(Integer.parseInt(port)); + ls.add(Integer.parseInt(port),ls.getLast()); + ls.removeLast(); + } + + void outputStream(PrintStream os,String request,String parentnum,String counter,String leaderflag) { + os.println(request); + os.println(parentnum); + os.println(counter); + os.println(leaderflag); + } + + void checkParameter(int parent,int counter,String leaderflag) { + System.out.println("pの値="+parentnum); + System.out.println("iの値="+counter); + System.out.println("leaderflag="+leaderflag + "\n"); + } + + 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++; + } + } + } - -class sock{ - void arg(String line,LinkedList ls){ +/* +class sock { + void arg(String line,LinkedList ls) { if(line != null){ ls.add(line); } @@ -181,12 +210,12 @@ } } } - +*/ 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{ + void clost(String hiddenchild,String newparent,String newtreenum,String newpnum,String newleaderflag,int i) throws IOException{ try { System.out.println(hiddenchild + "に接続します");