diff src/main/java/jp/ac/u_ryukyu/treevnc/server/VncProxyService.java @ 38:c2f0b6907448

add doc directory
author one
date Thu, 27 Sep 2012 19:32:25 +0900
parents 1454d6fe96c1
children 3c072f2f39bb
line wrap: on
line diff
--- 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();
+	}
 }