# HG changeset patch # User Yu Taninari # Date 1312642576 -32400 # Node ID 7d9e9dfd7eb844ddba363048c56936515d314def # Parent 4423c9c5ab5b732a6aa6ff25a370a6ce4efeae5e modify AcceptClient.java diff -r 4423c9c5ab5b -r 7d9e9dfd7eb8 src/myVncProxy/AcceptClient.java --- a/src/myVncProxy/AcceptClient.java Thu Jul 28 17:50:14 2011 +0900 +++ b/src/myVncProxy/AcceptClient.java Sat Aug 06 23:56:16 2011 +0900 @@ -6,215 +6,226 @@ import java.util.*; public class AcceptClient extends Thread { - int counter = 0 , parentnum = 0/*落ちたときの親の番号をカウントするためのもの*/; + int counter = 0, parentnum = 0/* 落ちたときの親の番号をカウントするためのもの */; LinkedList ls = new LinkedList(); - boolean runflag =false; - private String name; - boolean addrRegistor=true; + boolean runflag = false; + private String name; + boolean addrRegistor = true; public AcceptClient(String _name) { name = _name; } + public AcceptClient() { new CreateThread(this); } - - public synchronized void gethost(BufferedReader is,PrintStream os) { - String line,port; + + public synchronized void transferParentAddrerss(BufferedReader is,PrintStream os) { + String line, port; int intv_time = 100; String request; - int treebranch = 2;//treeの子ノードの数 - String leaderflag="0",sendleaderflag="0";//Socket send standardization String - - - // クライアントからのメッセージを待ち、受け取ったメッセージをそのまま返す + int treebranch = 2;// treeの子ノードの数 + String leaderflag = "0", sendleaderflag = "0"; + + // クライアントからのメッセージを待ち、受け取ったメッセージをそのまま返す 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) { + 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); + String checkRepetition = is.readLine(); + os.println(ls.getLast()); + parentnum = (Integer.parseInt(port) - 1) / treebranch; + String newparent = ls.get(parentnum); + + counter--; + runflag = true; + + sendleaderflag = decisionLeader(Integer.parseInt(port), + treebranch); + + Child report = new Child(); + + report.reportLastNode(ls.getLast(), newparent, port, + String.valueOf(parentnum), sendleaderflag, counter); - if("1".equals(line)) { - System.out.println("親が落ちましたmessage" + port); - os.println(ls.getLast()); - parentnum = (Integer.parseInt(port) -1) / treebranch; - String hidenchild=ls.getLast(); - String newparent=ls.get(parentnum); - listupdate(port); - counter--; - runflag = true; - - if((counter-1)%treebranch==1) { // children in most young treenum have leaderflag 1 other 0 - sendleaderflag = "1"; - } else { - sendleaderflag = "0"; - } + listupdate(port); + + int g = 0; + for (String bs : ls) { + System.out.println(g + "番目" + bs); + g++; + } + + os.println(port); + // os.println(leaderflag); + + leaderflag = decisionLeader( + Integer.parseInt(checkRepetition), treebranch); - 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(); + if (Integer.parseInt(checkRepetition) == counter + 1) { + checkRepetition = "stop"; + } else { + checkRepetition = "go"; + } + os.println(checkRepetition); - } 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(leaderflag); + Thread.sleep(intv_time); + is.close(); + os.close(); + + } 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.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(); - os.close(); + os.close(); + is.close(); + } else if ("3".equals(line)) { + String checkRepetition = is.readLine(); + System.out.println("落ちたのを確認しました"); + + os.println(ls.get(Integer.parseInt(port))); + os.println(port); + + if (checkRepetition.equals(ls.getLast())) { + checkRepetition = "stop"; } else { - if(addrRegistor==true){ - ls.add(add); - addrRegistor = false; - } - System.out.println(parentnum); - if(line != null) { - arg(line,ls); - counter++; - } else { - break; - } + checkRepetition = "go"; + } + os.println(checkRepetition); + + System.out + .println("num4=" + ls.get(Integer.parseInt(port))); + line = null; + runflag = false; + is.close(); + os.close(); + } else { + if (addrRegistor == true) { + ls.add(add); + addrRegistor = false; + } - if(counter>=treebranch+1) { - if((counter-1)%treebranch==0) { - leaderflag = "1"; - } else { - leaderflag = "0"; - } - - parentnum = (counter - 1) / treebranch; - // request = [p-1]; - request = ls.get(parentnum); - - outputStream(os,request,String.valueOf(parentnum), - String.valueOf(counter),leaderflag); - - checkParameter(parentnum,counter,leaderflag); - } else { - //treeの親ノードに接続する人に接続する人を教える - outputStream(os,name,"0",String.valueOf(counter), - leaderflag); - } - Thread.sleep(intv_time); + if (line != null) { + addClientAdress(line, ls); + counter++; + } else { + break; } + + if (counter >= treebranch + 1) { + + leaderflag = decisionLeader(counter, treebranch); + parentnum = (counter - 1) / treebranch; + + request = ls.get(parentnum); + System.out.println(parentnum); + + outputStream(os, request, String.valueOf(parentnum), + String.valueOf(counter), leaderflag); + + checkParameter(parentnum, counter, leaderflag); + } else { + // treeの親ノードに接続する人に接続する人を教える + outputStream(os, name, "0", String.valueOf(counter), + leaderflag); + } + 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); - } - */ - //} comment out while + + } catch (IOException e) { + System.out.println(e); + } + + catch (InterruptedException e) { + e.printStackTrace(); + } } - + /** * @param port - * parent value + * parent value */ void listupdate(String port) { ls.remove(Integer.parseInt(port)); - ls.add(Integer.parseInt(port),ls.getLast()); + ls.add(Integer.parseInt(port), ls.getLast()); ls.removeLast(); } - void outputStream(PrintStream os,String request,String parentnum,String treenum,String leaderflag) { + void outputStream(PrintStream os, String request, String parentnum, + String treenum, String leaderflag) { os.println(request); os.println(parentnum); os.println(treenum); 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 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){ + + void addClientAdress(String line, LinkedList ls) { + int g = 0; + 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++; + String decisionLeader(int counter, int treebranch) { + if ((counter - 1) % treebranch == 1) { // children in most young treenum + // have leaderflag 1 other 0 + return "0"; + } else { + return "1"; } } + } -/* -class sock { - void arg(String line,LinkedList ls) { - if(line != null){ - ls.add(line); - } - int g=0; +class Child { - for(String bs: ls){ - System.out.println(g+"番目"+bs); - g++; - } - } -} -*/ -class Child{ - - void reportLastNode(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 + "に接続します"); - echoSocket = new Socket(hiddenchild, 10001 + (i + 1));//i+1は実験中に同じマシーンを使っていたのでportを変えて対応、本番時には取り除く予定。 + echoSocket = new Socket(hiddenchild, 10001 + (i + 1));// i+1は実験中に同じマシーンを使っていたのでportを変えて対応、本番時には取り除く予定。 - DataOutputStream os = new DataOutputStream(echoSocket.getOutputStream()); + DataOutputStream os = new DataOutputStream( + echoSocket.getOutputStream()); - os.writeBytes(newparent+"\n"); - os.writeBytes(newpnum+"\n"); - os.writeBytes(newtreenum+"\n"); - os.writeBytes(newleaderflag+"\n"); - + os.writeBytes(newparent + "\n"); + os.writeBytes(newpnum + "\n"); + 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) { - System.err.println("Couldn't get I/O for the connection to: localhost"); + System.err + .println("Couldn't get I/O for the connection to: localhost"); } } diff -r 4423c9c5ab5b -r 7d9e9dfd7eb8 src/myVncProxy/CreateThread.java --- a/src/myVncProxy/CreateThread.java Thu Jul 28 17:50:14 2011 +0900 +++ b/src/myVncProxy/CreateThread.java Sat Aug 06 23:56:16 2011 +0900 @@ -33,7 +33,7 @@ Socket clientSocket = echoServer.accept(); BufferedReader is = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); PrintStream os = new PrintStream(clientSocket.getOutputStream()); - acceptClient.gethost(is,os); + acceptClient.transferParentAddrerss(is,os); } catch (IOException e){ e.printStackTrace(); System.out.println(e);