# HG changeset patch # User Yu Taninari # Date 1311843014 -32400 # Node ID 4423c9c5ab5b732a6aa6ff25a370a6ce4efeae5e # Parent 6fc4272db7e22d170b2b70181536ff00bdd12e70 update diff -r 6fc4272db7e2 -r 4423c9c5ab5b src/myVncProxy/AcceptClient.java --- a/src/myVncProxy/AcceptClient.java Tue Jul 26 22:41:15 2011 +0900 +++ b/src/myVncProxy/AcceptClient.java Thu Jul 28 17:50:14 2011 +0900 @@ -6,7 +6,7 @@ import java.util.*; public class AcceptClient extends Thread { - int counter = 0 , parentnum = 0,t = 0/*落ちたときの親の番号をカウントするためのもの*/; + int counter = 0 , parentnum = 0/*落ちたときの親の番号をカウントするためのもの*/; LinkedList ls = new LinkedList(); boolean runflag =false; private String name; @@ -20,7 +20,7 @@ } public synchronized void gethost(BufferedReader is,PrintStream os) { - String line,port,handover; + String line,port; int intv_time = 100; String request; int treebranch = 2;//treeの子ノードの数 @@ -29,7 +29,7 @@ // クライアントからのメッセージを待ち、受け取ったメッセージをそのまま返す try { - while (true){ + while (true) { line = is.readLine(); port = is.readLine(); @@ -38,46 +38,42 @@ InetAddress addr = InetAddress.getLocalHost(); String add = new String(addr.getHostAddress()); - if("1".equals(line)){ + if("1".equals(line)) { System.out.println("親が落ちましたmessage" + port); os.println(ls.getLast()); - handover = String.valueOf((Integer.parseInt(port) - 1) / treebranch); + parentnum = (Integer.parseInt(port) -1) / treebranch; String hidenchild=ls.getLast(); - String newparent=ls.get(Integer.parseInt(handover)); + String newparent=ls.get(parentnum); listupdate(port); - /* - ls.remove(Integer.parseInt(port)); - ls.add(Integer.parseInt(port),ls.getLast()); - ls.remove(Integer.parseInt(port)); - */ counter--; - t++; runflag = true; - /* - if(t % treebranch == 0){ - parentnum--; - } - */ - parentnum = (Integer.parseInt(port) -1) / treebranch; - - if((counter-1)%treebranch==1){ // children in most young treenum have leaderflag 1 other 0 + + if((counter-1)%treebranch==1) { // children in most young treenum have leaderflag 1 other 0 sendleaderflag = "1"; - }else{ + } else { sendleaderflag = "0"; } - Child child = new Child(); - child.clost(hidenchild,newparent,port,handover,sendleaderflag,counter); + Child report = new Child(); + + report.reportLastNode(hidenchild,newparent,port,String.valueOf(parentnum), + sendleaderflag,counter); + 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)){ + } else if("2".equals(line)) { + parentnum = (Integer.parseInt(port) -1) / treebranch; + String newparent=ls.get(parentnum); + + outputStream(os,newparent,String.valueOf(parentnum), + String.valueOf(counter),leaderflag); + + os.close(); + is.close(); + } else if("3".equals(line)) { System.out.println("落ちたのを確認しました"); os.println(ls.get(Integer.parseInt(port))); @@ -92,60 +88,48 @@ runflag = false; is.close(); os.close(); - }else{ + } else { if(addrRegistor==true){ ls.add(add); addrRegistor = false; } System.out.println(parentnum); - if(line != null){ + if(line != null) { arg(line,ls); counter++; - }else{ + } else { break; } - if(counter>=treebranch+1){ - if((counter-1)%treebranch==0){ + if(counter>=treebranch+1) { + if((counter-1)%treebranch==0) { leaderflag = "1"; - }else{ + } else { leaderflag = "0"; } - /* - if((counter-1)%treebranch==0){ - parentnum++; - } - */ + parentnum = (counter - 1) / treebranch; // request = [p-1]; request = ls.get(parentnum); - /* - os.println(request); - os.println(String.valueOf(parentnum)); - os.println(String.valueOf(counter)); - os.println(leaderflag); - */ - outputStream(os,request,String.valueOf(parentnum),String.valueOf(counter),leaderflag); + + outputStream(os,request,String.valueOf(parentnum), + String.valueOf(counter),leaderflag); + checkParameter(parentnum,counter,leaderflag); - }else{ + } else { //treeの親ノードに接続する人に接続する人を教える - outputStream(os,name,"0",String.valueOf(counter),leaderflag); - /* - os.println(name);//あとで渡されたmainArgs[1](現在はname)を渡す予定,addに変更 - os.println("0"); - os.println(String.valueOf(counter)); - os.println(leaderflag); - */ + outputStream(os,name,"0",String.valueOf(counter), + leaderflag); } Thread.sleep(intv_time); } } - } catch (IOException e){ + } catch (IOException e) { System.out.println(e); } - catch(InterruptedException e){ + catch(InterruptedException e) { e.printStackTrace(); } /* @@ -169,10 +153,10 @@ ls.removeLast(); } - void outputStream(PrintStream os,String request,String parentnum,String counter,String leaderflag) { + void outputStream(PrintStream os,String request,String parentnum,String treenum,String leaderflag) { os.println(request); os.println(parentnum); - os.println(counter); + os.println(treenum); os.println(leaderflag); } @@ -213,7 +197,7 @@ */ class Child{ - void clost(String hiddenchild,String newparent,String newtreenum,String newpnum,String newleaderflag,int i) throws IOException{ + void reportLastNode(String hiddenchild,String newparent,String newtreenum,String newpnum,String newleaderflag,int i) throws IOException{ try { Socket echoSocket; System.out.println(hiddenchild + "に接続します"); @@ -226,6 +210,7 @@ os.writeBytes(newtreenum+"\n"); os.writeBytes(newleaderflag+"\n"); + os.close(); } catch (UnknownHostException e) { System.err.println("Don't know about host: localhost"); } catch (IOException e) {