changeset 115:7d9e9dfd7eb8

modify AcceptClient.java
author Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
date Sat, 06 Aug 2011 23:56:16 +0900
parents 4423c9c5ab5b
children 5b124b0ceaa7
files src/myVncProxy/AcceptClient.java src/myVncProxy/CreateThread.java
diffstat 2 files changed, 168 insertions(+), 157 deletions(-) [+]
line wrap: on
line diff
--- 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<String> ls = new LinkedList<String>();
-	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<String> ls) {
-		if(line != null){
+
+	void addClientAdress(String line, LinkedList<String> 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<String> 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");
 		}
 
 	}
--- 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);