changeset 38:c2f0b6907448

add doc directory
author one
date Thu, 27 Sep 2012 19:32:25 +0900
parents 1454d6fe96c1
children 6a34a5220a01
files dist/tightvnc-jviewer-2.5.0/tightvnc-jviewer.jar doc/change VNCServer1.asta src/main/java/com/glavsoft/rfb/protocol/ProtocolContext.java src/main/java/jp/ac/u_ryukyu/treevnc/AcceptThread.java src/main/java/jp/ac/u_ryukyu/treevnc/MyRfbProto.java src/main/java/jp/ac/u_ryukyu/treevnc/client/EchoClient.java src/main/java/jp/ac/u_ryukyu/treevnc/client/MyRfbProtoClient.java src/main/java/jp/ac/u_ryukyu/treevnc/client/WaitReply.java src/main/java/jp/ac/u_ryukyu/treevnc/server/AcceptClient.java src/main/java/jp/ac/u_ryukyu/treevnc/server/BroadCastProxy.java src/main/java/jp/ac/u_ryukyu/treevnc/server/ChangeHost.java src/main/java/jp/ac/u_ryukyu/treevnc/server/CreateThread.java src/main/java/jp/ac/u_ryukyu/treevnc/server/GetBroadCastProxy.java src/main/java/jp/ac/u_ryukyu/treevnc/server/MyRfbProtoProxy.java src/main/java/jp/ac/u_ryukyu/treevnc/server/VncProxyService.java src/viewer_swing/java/com/glavsoft/viewer/ConnectionManager.java src/viewer_swing/java/com/glavsoft/viewer/Viewer.java
diffstat 17 files changed, 196 insertions(+), 86 deletions(-) [+]
line wrap: on
line diff
Binary file dist/tightvnc-jviewer-2.5.0/tightvnc-jviewer.jar has changed
Binary file doc/change VNCServer1.asta has changed
--- a/src/main/java/com/glavsoft/rfb/protocol/ProtocolContext.java	Wed Sep 19 19:08:07 2012 +0900
+++ b/src/main/java/com/glavsoft/rfb/protocol/ProtocolContext.java	Thu Sep 27 19:32:25 2012 +0900
@@ -68,5 +68,5 @@
 	void cleanUpSession(String message);
 
 	void setInitData(byte[] initData);
-
+	
 }
\ No newline at end of file
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/AcceptThread.java	Wed Sep 19 19:08:07 2012 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/AcceptThread.java	Thu Sep 27 19:32:25 2012 +0900
@@ -8,9 +8,10 @@
 import com.glavsoft.transport.Writer;
 
 public class AcceptThread implements Runnable {
-        MyRfbProto rfb = null;
+        public MyRfbProto rfb = null;
         byte[] imageBytes;
         int port;
+        public boolean flag = false;
         
         public AcceptThread(MyRfbProto _rfb) {
                 rfb = _rfb;
@@ -32,14 +33,28 @@
 		while (true) {
 			try {
 				Socket newCli = rfb.accept();
-
+				if(flag) throw new IOException();
 				OutputStream os = newCli.getOutputStream();
 				InputStream is = newCli.getInputStream();
+				if(confirmHalt(is)) break;
 				rfb.newClient(this, newCli, new Writer(os), new Reader(is));
 			} catch (IOException e) {
-				e.printStackTrace();
-				System.out.println(e);
+				break;
 			}
 		}
 	}
+	
+	
+	/**
+	 * Instruction stop if you come from if WaitReply.
+	 * @return if return true. This Thread halt.
+	 */
+	private boolean confirmHalt(InputStream is) throws IOException {
+		byte[] b = new byte[4];
+		is.mark(4);
+		is.read(b);
+		if(String.valueOf(b).equals("halt")) return true;
+		is.reset();
+		return false;
+	}
 }
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/MyRfbProto.java	Wed Sep 19 19:08:07 2012 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/MyRfbProto.java	Thu Sep 27 19:32:25 2012 +0900
@@ -290,8 +290,8 @@
 		return null;
 	}
 
-	public void selectPort(int port) {
-		
+	public int selectPort(int port) {
+		return port;
 	}
 
 
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/client/EchoClient.java	Wed Sep 19 19:08:07 2012 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/client/EchoClient.java	Thu Sep 27 19:32:25 2012 +0900
@@ -267,18 +267,14 @@
 	public Socket createSocketForClient(Socket soc) throws IOException {
 		BufferedReader is = new BufferedReader(new InputStreamReader(
 				soc.getInputStream()));
-		if ((parentAddress = is.readLine()) != null) {
-			System.out.println("Server: " + parentAddress);
-		}
-		if ((parentNum = is.readLine()) != null) {
-			System.out.println("parent: " + parentNum);
-		}
-		if ((treeNum = is.readLine()) != null) {
-			System.out.println("treenum: " + treeNum);
-		}
-		if ((leaderFlag = is.readLine()) != null) {
-			System.out.println("leaderflag: " + leaderFlag);
-		}
-		return new Socket(parentAddress,5999);
+		String tempParentAddress = is.readLine();
+		parentNum = is.readLine();
+		if("reconnection".equals(tempParentAddress)) {
+			System.out.println("into function \n" + parentNum);
+			return new Socket(parentAddress,Integer.parseInt(parentNum));
+		} 
+		treeNum = is.readLine();
+		leaderFlag = is.readLine();
+		return new Socket(tempParentAddress,5999);
 	}
 }
\ No newline at end of file
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/client/MyRfbProtoClient.java	Wed Sep 19 19:08:07 2012 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/client/MyRfbProtoClient.java	Thu Sep 27 19:32:25 2012 +0900
@@ -86,7 +86,7 @@
 	}
 
 	@Override
-	public void selectPort(int p) {
+	public int selectPort(int p) {
 		int port = p;
 		while (true) {
 			try {
@@ -100,6 +100,7 @@
 			}
 		}
 		System.out.println("accept port = " + port);
+		return port;
 	}
 
 	void sendRfbVersion(OutputStream os) throws IOException {
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/client/WaitReply.java	Wed Sep 19 19:08:07 2012 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/client/WaitReply.java	Thu Sep 27 19:32:25 2012 +0900
@@ -1,12 +1,17 @@
 package jp.ac.u_ryukyu.treevnc.client;
 
 import java.io.IOException;
+import java.io.OutputStream;
 import java.net.ServerSocket;
 import java.net.Socket;
 
+/**
+ * this Class get top(Proxy) Instruction. 
+ * Type of Instruction is ReConnection and SocketClose.
+ */
 public class WaitReply extends Thread {
-	boolean passflag;
-	EchoClient echo;
+	private boolean passflag;
+	private EchoClient echo;
 	
 	public WaitReply(String treenum, EchoClient echo) {
 		this.echo = echo;
@@ -19,7 +24,6 @@
 	public void run() {
 		Socket clientSocket = null;
 		ServerSocket echoServer = null;
-
 		while (true) {
 			try {
 				echoServer = new ServerSocket(10001);
@@ -28,6 +32,7 @@
 					echo.client.close();
 					passflag = true;
 					echo.client.setSocket(echo.createSocketForClient(clientSocket));
+					// hult();
 					// client.init();
 					echo.client.run();
 					echoServer.close();
@@ -37,4 +42,11 @@
 			}
 		}
 	}
+	
+	private void hult() throws IOException {
+		Socket socket = new Socket("localhsot",	echo.client.getPort());
+		OutputStream stream = socket.getOutputStream();
+		stream.write("halt".getBytes());
+		stream.flush();
+	}
 }
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/server/AcceptClient.java	Wed Sep 19 19:08:07 2012 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/server/AcceptClient.java	Thu Sep 27 19:32:25 2012 +0900
@@ -21,7 +21,7 @@
 
 
 
-	public AcceptClient(String name) {
+	public AcceptClient() {
 		//this.name = name;
 	}
 
@@ -289,4 +289,12 @@
 	private void notifyThread() {
 		notifyAll();
 	}
+	
+	public LinkedList<String> getList() {
+		return ls;
+	}
+	
+	public void setList(LinkedList<String> _ls) {
+		ls = _ls;
+	}
  }
\ No newline at end of file
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/server/BroadCastProxy.java	Wed Sep 19 19:08:07 2012 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/server/BroadCastProxy.java	Thu Sep 27 19:32:25 2012 +0900
@@ -14,22 +14,22 @@
 		str = _str;
 	}
 
-	void createSocket(String addr) {	
-		while (true) {
-			try {
-				Thread.sleep(1000);
-				socket = new Socket(addr, port);
-				os = new PrintStream(socket.getOutputStream());
-				os.println(str);
-				os.close();
-				socket.close();
-				break;
-			} catch (IOException e) {
-				System.out.println("Connection faild");
-				continue;
-			} catch (InterruptedException e) {
-				e.printStackTrace();
-			}
+	void createSocket(String addr) {
+		// while (true) {
+		try {
+			Thread.sleep(1000);
+			socket = new Socket(addr, port);
+			os = new PrintStream(socket.getOutputStream());
+			os.println(str);
+			os.close();
+			socket.close();
+			//break;
+		} catch (IOException e) {
+			System.out.println("Connection faild");
+			//continue;
+		} catch (InterruptedException e) {
+			e.printStackTrace();
 		}
+		// }
 	}
 }
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/server/ChangeHost.java	Wed Sep 19 19:08:07 2012 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/server/ChangeHost.java	Thu Sep 27 19:32:25 2012 +0900
@@ -1,11 +1,12 @@
 package jp.ac.u_ryukyu.treevnc.server;
 
-import java.awt.event.WindowListener;
 import java.io.BufferedReader;
+import java.io.DataOutputStream;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.net.Socket;
 import java.net.UnknownHostException;
+import java.util.LinkedList;
 
 import jp.ac.u_ryukyu.treevnc.MyRfbProto;
 
@@ -15,12 +16,17 @@
 import com.glavsoft.viewer.swing.ParametersHandler;
 
 public class ChangeHost extends ConnectionManager implements Runnable {
-	
+
 	private VncProxyService vps;
-
-	public ChangeHost(VncProxyService _vps, boolean isApplet) {
+	private VncProxyService prevVps;
+	private LinkedList<String> clientList;
+	private int port;
+	
+	public ChangeHost(VncProxyService _vps, boolean isApplet,
+			VncProxyService _prevVps) {
 		super(_vps, isApplet);
 		vps = _vps;
+		prevVps = _prevVps;
 	}
 
 	/**
@@ -32,17 +38,24 @@
 	@Override
 	public void run() {
 		try {
-			while (true) {
-				BufferedReader br = new BufferedReader(new InputStreamReader(
-						System.in));
-				str = br.readLine();
-				vps.setConnectionManager(this);
-				Thread thread = new Thread(vps);
-				thread.start();
-				System.out.println(str);
-			}
+			BufferedReader br = new BufferedReader(new InputStreamReader(
+					System.in));
+			str = br.readLine();
+			vps.changeVNCServer();
+			vps.setConnectionManager(this);
+			Thread thread = new Thread(vps);
+			thread.start();
+			Thread.sleep(1000);
+			vps.createConnectionAndStart();
+			prevVps.socketClose();
+			vps.aClient.setList(prevVps.aClient.getList());
+//			clientList = prevVps.aClient.getList();
+//			createSocketAndSend(clientList,String.valueOf(port));
+			System.out.println(str);
 		} catch (IOException e) {
 			e.printStackTrace();
+		} catch (InterruptedException e) {
+			e.printStackTrace();
 		}
 
 	}
@@ -76,4 +89,19 @@
 		}
 		return socket;
 	}
+	
+	private void createSocketAndSend(LinkedList<String> clientList,String port) throws UnknownHostException, IOException {
+		int i = 0;
+		for(String client : clientList) {
+			if(i!=0) {
+				Socket echoSocket;
+				echoSocket = new Socket(client, 10001);
+				DataOutputStream os = new DataOutputStream(echoSocket.getOutputStream());
+				os.writeBytes("reconnection\n");
+				os.writeBytes(port+"\n");
+				os.close();
+			}
+			i++;
+		}
+	}
 }
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/server/CreateThread.java	Wed Sep 19 19:08:07 2012 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/server/CreateThread.java	Thu Sep 27 19:32:25 2012 +0900
@@ -12,6 +12,7 @@
 	ServerSocket echoServer;
 	AcceptClient acceptClient;
 	private int port;
+	private boolean stopFlag;
 	
 	public CreateThread(AcceptClient _acc) {
 		acceptClient = _acc;
@@ -69,6 +70,7 @@
 			try {
 //				echoServer = new ServerSocket(9999);
 				Socket clientSocket = echoServer.accept();
+				if(stopFlag) break;
 				BufferedReader is = new BufferedReader(new InputStreamReader(
 						clientSocket.getInputStream()));
 				PrintStream os = new PrintStream(clientSocket.getOutputStream());
@@ -77,16 +79,11 @@
 			} catch (IOException e) {
 				System.out.println(e);
 			}
-/*
-			try {
-				echoServer.close();
-			} catch (IOException e) {
-				System.out.println(e);
-			}
-*/
-
 		}
 
 	}
+	public void setStopFlag(boolean flag){
+		stopFlag = flag;
+	}
 
 }
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/server/GetBroadCastProxy.java	Wed Sep 19 19:08:07 2012 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/server/GetBroadCastProxy.java	Thu Sep 27 19:32:25 2012 +0900
@@ -42,6 +42,7 @@
 				if("who".equals(castString(resorve))){
 						replyBroadCast();
 				}
+				if(stopFlag) break;
 			}
 		} catch (IOException e) {
 			e.printStackTrace();
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/server/MyRfbProtoProxy.java	Wed Sep 19 19:08:07 2012 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/server/MyRfbProtoProxy.java	Thu Sep 27 19:32:25 2012 +0900
@@ -78,9 +78,9 @@
 	/*
 	 * default port number is 5999.
 	 */
-	public void selectPort(int p) {
+	public int selectPort(int p) {
 		if (servSock != null)
-			return;
+			return 0;
 		int port = p;
 		while (true) {
 			try {
@@ -94,6 +94,7 @@
 			}
 		}
 		System.out.println("accept port = " + port);
+		return port;
 	}
 
 	int getAcceptPort() {
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/server/VncProxyService.java	Wed Sep 19 19:08:07 2012 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/server/VncProxyService.java	Thu Sep 27 19:32:25 2012 +0900
@@ -2,6 +2,9 @@
 
 import java.awt.event.*;
 import java.io.*;
+import java.net.Socket;
+import java.net.UnknownHostException;
+import java.util.LinkedList;
 import java.util.logging.Logger;
 
 import jp.ac.u_ryukyu.treevnc.AcceptThread;
@@ -38,10 +41,13 @@
 
 	public MyRfbProtoProxy rfb;
 	private ConnectionManager connectionManager;
+	private VncProxyService vps;
+	private CreateThread createThread;
+	AcceptClient aClient;
+	private int port;
 	// public AcceptClient acc;
 	public VncProxyService(Parser parser) {
 		this();
-		rfb = new MyRfbProtoProxy();
 		ParametersHandler.completeSettingsFromCLI(parser, connectionParams, settings, uiSettings);
 		showControls = ParametersHandler.showControls;
 		passwordFromParams = parser.getValueFor(ParametersHandler.ARG_PASSWORD);
@@ -50,6 +56,8 @@
 	}
 	
 	public VncProxyService() {
+		rfb = new MyRfbProtoProxy();
+		aClient = new AcceptClient();
 		connectionManager = new ConnectionManager(this, isApplet);
 		connectionParams = new ParametersHandler.ConnectionParams();
 		settings = ProtocolSettings.getDefaultSettings();
@@ -64,8 +72,6 @@
 	private ConnectionParams connectionParams;
 	private final ProtocolSettings settings;
 	private final UiSettings uiSettings;
-	private Thread bCast;
-	private Thread accThread;
 	private AcceptThread acceptThread;
 	private GetBroadCastProxy getCast;
 	
@@ -100,8 +106,7 @@
 		} catch (InterruptedException e) {
 			e.printStackTrace();
 		}
-		vps.createConnection();
-		vps.start_threads();
+		vps.createConnectionAndStart();
 	}
 	
 	private void setArguments(String[] mainArgs) {
@@ -133,9 +138,9 @@
 				workingProtocol = new Protocol(reader, writer,
 						new PasswordChooser(passwordFromParams, connectionParams, containerFrame, this),
 						settings);
-				threadSetAndStart();
 				workingProtocol.handshake();
 				rfb.setProtocolContext(workingProtocol);
+				threadSetAndStart();
 				// input into change parents
                 ClipboardControllerImpl clipboardController =
 		                new ClipboardControllerImpl(workingProtocol, settings.getRemoteCharsetName());
@@ -176,20 +181,20 @@
 		}
 	}
 	
-	public void createConnection() {
-		rfb.selectPort(5999);
-		acceptThread = new AcceptThread(rfb, 5999);
-		accThread = new Thread(acceptThread);
+	public void createConnectionAndStart() {
+		port = rfb.selectPort(5999);
+		acceptThread = new AcceptThread(rfb, port);
+		Thread thread = new Thread(acceptThread);
+		thread.start();
 		getCast = new GetBroadCastProxy(this,
 				workingProtocol.getRemoteDesktopName(),
 				this.connectionParams.hostName);
-		bCast = new Thread(getCast);		
+		thread = new Thread(getCast);		
+		thread.start();
 	}
 	
 	public void start_threads() {
 		//rfbThread.start();
-		accThread.start();
-		bCast.start();
 		//rfb.requestThreadStart();
 	}
 
@@ -206,7 +211,7 @@
 			printUsage(parser.optionsUsage());
 			System.exit(0);
 		}
-		VncProxyService vps = new VncProxyService(parser);
+		vps = new VncProxyService(parser);
 		if (mainArgs.length != 0) {
 			for (int i = 0; i < argv.length; i++) {
 				vps.setArguments(mainArgs);
@@ -223,8 +228,7 @@
 		} catch (InterruptedException e) {
 			e.printStackTrace();
 		}
-		vps.createConnection();
-		vps.start_threads();
+		vps.createConnectionAndStart();
 	}
 
 	
@@ -241,16 +245,55 @@
 		closeApp();
 	}
 	
-	private void threadSetAndStart() {
-		AcceptClient aClient = new AcceptClient(connectionParams.hostName);
-		Thread thread = new Thread(new CreateThread(aClient));
+	private void threadSetAndStart() throws UnknownHostException, IOException {
+		//aClient = new AcceptClient();
+		createThread = new CreateThread(aClient);
+		Thread thread = new Thread(createThread);
 		thread.start();
-		thread = new Thread(new ChangeHost(this, forceReconnection));
+		thread = new Thread(new ChangeHost(new VncProxyService(), forceReconnection,this));
 		thread.start();
-		
+//		createSocketAndSend(aClient.getList(),String.valueOf(port));
 	}
 	
 	public void setConnectionManager(ConnectionManager _connectionManager) {
 		connectionManager = _connectionManager;
 	}
+	
+	protected void socketClose() {
+		try {
+			workingSocket.close();
+			acceptThread.flag=true;
+			getCast.setStopFlag(true);
+			//createThread.setStopFlag(true);
+		} catch (IOException e) {/*nop*/}
+	}
+	
+	@Override
+	public void rfbSessionStopped(final String reason) {
+		if (workingSocket != null && workingSocket.isConnected()) {
+			try {
+				workingSocket.close();
+			} catch (IOException e) { /*nop*/ }
+		}
+	}
+	
+	private void createSocketAndSend(LinkedList<String> clientList,String port) throws UnknownHostException, IOException {
+		int i = 0;
+		for(String client : clientList) {
+			if(i!=0) {
+				Socket echoSocket;
+				echoSocket = new Socket(client, 10001);
+				DataOutputStream os = new DataOutputStream(echoSocket.getOutputStream());
+				os.writeBytes("reconnection\n");
+				os.writeBytes(port+"\n");
+				os.close();
+			}
+			i++;
+		}
+	}
+
+	public void changeVNCServer() {
+		// sender and re
+		workingProtocol.cleanUpSession();
+	}
 }
--- a/src/viewer_swing/java/com/glavsoft/viewer/ConnectionManager.java	Wed Sep 19 19:08:07 2012 +0900
+++ b/src/viewer_swing/java/com/glavsoft/viewer/ConnectionManager.java	Thu Sep 27 19:32:25 2012 +0900
@@ -124,6 +124,7 @@
 		ConnectionDialog connectionDialog = null;
 		boolean wasError = false;
 		do {
+			/*
 			if (forceConnectionDialog || wasError ||
 					connectionParams.isHostNameEmpty() ||
 					-1 == connectionParams.portNumber) {
@@ -137,6 +138,9 @@
 				connectionParams.hostName = connectionDialog.getServerNameString();
 				connectionParams.portNumber = connectionDialog.getPort();
 			}
+			*/
+			connectionParams.hostName = "localhost";
+			connectionParams.portNumber = 5900;
 			Viewer.logger.info("Connecting to host " + connectionParams.hostName + ":" + connectionParams.portNumber);
 			try {
 				socket = new Socket(connectionParams.hostName, connectionParams.portNumber);
--- a/src/viewer_swing/java/com/glavsoft/viewer/Viewer.java	Wed Sep 19 19:08:07 2012 +0900
+++ b/src/viewer_swing/java/com/glavsoft/viewer/Viewer.java	Thu Sep 27 19:32:25 2012 +0900
@@ -620,7 +620,7 @@
 
 	
 	private void runAcceptThread() {
-		Thread accThread = new Thread(new AcceptThread(rfb, 5999));
+		Thread accThread = new Thread(new AcceptThread(rfb, connectionParams.portNumber));
 		accThread.start();
 	}
 	
@@ -652,5 +652,9 @@
 			e.printStackTrace();
 		}
 	}
+	
+	public int getPort() {
+		return connectionParams.portNumber;
+	}
 
 }