changeset 63:4864a7d1df00

add CreateThread.java modify acceptClient.java and VncProxyService.java
author Yu Taninari <e085734@ie.u-ryukyu.ac.jp>
date Tue, 12 Jul 2011 13:47:32 +0900
parents 7795e2b5d3ef
children 3ec4c9e94462 5fca2bb52dc7
files src/myVncProxy/CreateThread.java src/myVncProxy/VncProxyService.java src/myVncProxy/acceptClient.java src/myVncProxy/acceptThread.java
diffstat 4 files changed, 241 insertions(+), 203 deletions(-) [+]
line wrap: on
line diff
--- /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);
+			}
+			
+		}
+
+	}
+
+}
--- 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();
 
 
--- 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<String> ls = new LinkedList<String>();
-    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<String> ls = new LinkedList<String>();
+	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<String> ls){
-	if(line != null){
-	    ls.add(line);
-	}
-	int g=0;
+	void arg(String line,LinkedList<String> 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
+	}
+}
--- 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 @@
 		}
 	}
 }
+