changeset 61:d9cf08c6415c

During implementation change screen.
author Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
date Tue, 31 Dec 2013 09:13:07 +0900
parents ac6f9e46566f
children a5b831d5b542
files .gradle/1.4/taskArtifacts/fileHashes.bin build.gradle src/main/java/com/glavsoft/rfb/client/FramebufferUpdateRequestMessage.java src/main/java/com/glavsoft/rfb/protocol/Protocol.java src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.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/WaitReply.java src/main/java/jp/ac/u_ryukyu/treevnc/server/AcceptClient.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/TreeViewer.java src/viewer_swing/java/com/glavsoft/viewer/Viewer.java src/viewer_swing/java/com/glavsoft/viewer/swing/SwingRfbConnectionWorker.java src/viewer_swing/java/com/glavsoft/viewer/swing/SwingViewerWindow.java
diffstat 16 files changed, 157 insertions(+), 86 deletions(-) [+]
line wrap: on
line diff
Binary file .gradle/1.4/taskArtifacts/fileHashes.bin has changed
--- a/build.gradle	Sat Dec 21 18:46:54 2013 +0900
+++ b/build.gradle	Tue Dec 31 09:13:07 2013 +0900
@@ -37,12 +37,13 @@
 }
 
 dependencies {
-    viewerSwingCompile group: 'com.jcraft', name: 'jsch', version: '0.1.+', ext: 'jar'
+    //viewerSwingCompile group: 'com.jcraft', name: 'jsch', version: '0.1.+', ext: 'jar'
+    compile group: 'com.jcraft', name: 'jsch', version: '0.1.+', ext: 'jar'
     viewerSwingRuntime configurations.viewerSwingCompile
     testCompile group: 'junit', name: 'junit', version: '4.+'
 }
 
-def manifestAttributes = ['Main-Class': 'com.glavsoft.viewer.Viewer',
+def manifestAttributes = ['Main-Class': 'com.glavsoft.viewer.TreeViewer',
         'Implementation-Version': "${project.version} (${buildNo})",
         'Implementation-Title': 'TightVNC Viewer',
         'Implementation-Vendor': 'GlavSoft LLC.']
--- a/src/main/java/com/glavsoft/rfb/client/FramebufferUpdateRequestMessage.java	Sat Dec 21 18:46:54 2013 +0900
+++ b/src/main/java/com/glavsoft/rfb/client/FramebufferUpdateRequestMessage.java	Tue Dec 31 09:13:07 2013 +0900
@@ -78,7 +78,6 @@
 		TimerTask tt = new TimerTask() {
 			@Override
 			public void run() {
-				System.out.println("fullscreen");
 				sendFullScreenFlag = true;
 			}
 		};
--- a/src/main/java/com/glavsoft/rfb/protocol/Protocol.java	Sat Dec 21 18:46:54 2013 +0900
+++ b/src/main/java/com/glavsoft/rfb/protocol/Protocol.java	Tue Dec 31 09:13:07 2013 +0900
@@ -66,8 +66,8 @@
 	private PixelFormat serverPixelFormat;
 	private Thread senderThread;
 	private Thread receiverThread;
-        private boolean isTight;
-        private String protocolVersion;
+	private boolean isTight;
+	private String protocolVersion;
 	private byte[] initData;
 	private boolean isRetina = false;
 
--- a/src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java	Sat Dec 21 18:46:54 2013 +0900
+++ b/src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java	Tue Dec 31 09:13:07 2013 +0900
@@ -76,6 +76,7 @@
 		rfb = _rfb;
 		if(!(rfb instanceof MyRfbProtoClient)) {
 			fullscreenFbUpdateIncrementalRequest.sendFullScreenRequest();
+			connectionFinished();
 		}
 	}
 	
@@ -237,4 +238,8 @@
 	public void stopTask() {
 		isRunning = false;
 	}
+	
+	private void connectionFinished() {
+		rfb.setReadyReconnect(true);
+	}
 }
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/MyRfbProto.java	Sat Dec 21 18:46:54 2013 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/MyRfbProto.java	Tue Dec 31 09:13:07 2013 +0900
@@ -31,6 +31,7 @@
 	private EchoClient echo;
 	private String proxyAddr;
 	public int acceptPort;
+	protected boolean readyReconnect; 
 	
 	public MyRfbProto() {
 		rThread = new RequestScreenThread(this);
@@ -227,15 +228,12 @@
 	}
 		
 	public void screenChangeRequest() throws IOException {
-		Socket echoSocket;
-		echoSocket = new Socket(proxyAddr, 10001);
+		Socket echoSocket = new Socket(proxyAddr, 10001);
 		DataOutputStream os = new DataOutputStream(echoSocket.getOutputStream());
 		os.writeBytes(echo.getMyAddress()+"\n");
 		//os.writeBytes(String.valueOf(echo.client.getFrameWidth())+"\n"); temp comment out for rebuild
 		//os.writeBytes(String.valueOf(echo.client.getFrameHeight())+"\n"); temp comment out for rebuild
-		System.out.println("---------push-------");
-		// os.writeBytes("1240\n");
-		// os.writeBytes("880\n");
+		System.out.println("---------push-------"+proxyAddr);
 		os.close();
 	}
 	
@@ -369,4 +367,10 @@
 		return 0;
 	}
 	
+	public boolean getReadyReconnect() {
+		return readyReconnect;
+	}
+	
+	public void setReadyReconnect(boolean ready) {
+	} 
 }
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/client/EchoClient.java	Sat Dec 21 18:46:54 2013 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/client/EchoClient.java	Tue Dec 31 09:13:07 2013 +0900
@@ -89,9 +89,9 @@
 			} catch (IOException e) {
 				return false;
 			} catch (NullPointerException e) {
-				openport();
+				//openport();
 				System.out.println("notFoundParents");
-				notfoundParent();
+				//notfoundParent();
 			}
 		}
 		return true;
@@ -149,9 +149,10 @@
 		if (!("1".equals(leaderFlag))) {
 			ServerSocket waitReplyServer = new ServerSocket(9999);
 			Socket socketForWait = waitReplyServer.accept();
-			BufferedReader isNotLeader = new BufferedReader(new InputStreamReader(
-					socketForWait.getInputStream()));
-			System.out.println("-------------------renode----------------------------");
+			BufferedReader isNotLeader = new BufferedReader(
+					new InputStreamReader(socketForWait.getInputStream()));
+			System.out
+					.println("-------------------renode----------------------------");
 			if ((parentAddress = isNotLeader.readLine()) != null) {
 				System.out.println("Server: " + parentAddress);
 			}
@@ -167,7 +168,8 @@
 				e.printStackTrace();
 			}
 		} else {
-			System.out.println("-------------------re----------------------------");
+			System.out
+					.println("-------------------re----------------------------");
 			if ((parentAddress = is.readLine()) != null) {
 				System.out.println("Server: " + parentAddress);
 			}
@@ -186,14 +188,15 @@
 			try {
 				client.closeApp();
 				// set Socket for connection in VncViewer.
-				Socket soc = createSocketForClient(echoSocket,false);
+				Socket soc = createSocketForClient(echoSocket, false);
 				client.setSocket(soc);
-				if(soc != null)
+				if (soc != null) 
 					client.run();
+
 				break;
 			} catch (IOException e) {
 				break;
-				//continue;
+				// continue;
 			}
 		}
 	}
@@ -250,15 +253,12 @@
 	}
 
 	// create socket for ReConnection.
-	public Socket createSocketForClient(Socket soc,boolean flag) throws IOException {
-		Socket socket  = null;
+	public Socket createSocketForClient(Socket soc, boolean flag) throws IOException {
+		Socket socket = null;
 		String parentAddress;
-		int count = 0; 
-		
+		int count = 0;
 		System.out.println("########################PATH************************");
-
-		BufferedReader is = new BufferedReader(new InputStreamReader(
-				soc.getInputStream()));
+		BufferedReader is = new BufferedReader(new InputStreamReader(soc.getInputStream()));
 		parentAddress = is.readLine();
 		String port = is.readLine();
 		// It is called when the screen changes.
@@ -266,6 +266,7 @@
 			while (true) {
 				try {
 					client.setOpenPort(Integer.parseInt(port));
+					System.out.println("----------:"+this.parentAddress+"----------:"+port);
 					return new Socket(this.parentAddress,
 							Integer.parseInt(port));
 				} catch (IOException e) {
@@ -279,23 +280,25 @@
 					continue;
 				}
 			}
-		} else { 
-			System.out.println("###########################faild"+parentAddress);
-			if(parentAddress==null) 
+		} else {
+			System.out.println("###########################faild" + parentAddress+"port::"+port);
+			if (parentAddress == null)
 				return null;
-			is.readLine();// parentNum
+			 is.readLine();// parentNum
 		}
-		socket = new Socket(parentAddress,Integer.parseInt(port));
+		socket = new Socket(parentAddress, Integer.parseInt(port));
 		socket.setReuseAddress(true);
+		System.out.println("Return Soket");
 		return socket;
 	}
 
 	public String getParentsAddress() {
 		return parentAddress;
 	}
-	
+
 	public void reportConnectionFinished(Socket soc) throws IOException {
 		DataOutputStream os = new DataOutputStream(soc.getOutputStream());
 		os.writeBytes("finished");
 	}
+
 }
\ No newline at end of file
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/client/WaitReply.java	Sat Dec 21 18:46:54 2013 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/client/WaitReply.java	Tue Dec 31 09:13:07 2013 +0900
@@ -32,14 +32,17 @@
 				clientSocket = echoServer.accept();
 				if (clientSocket != null) {
 					echo.client.setTeminationType(true);
-					echo.client.stop();
+					//echo.client.closeApp();
+					passflag = true;
 					echo.client.closeApp();
-					passflag = true;
+					System.out.println("8888888888888888888888waitreply");
 					echo.client.setSocket(echo.createSocketForClient(clientSocket,true));
 					echo.client.run();
 					echoServer.close();
 					//report finished connection to server.
 					echo.reportConnectionFinished(clientSocket);
+					//echo.client.stop();
+					
 					clientSocket.close();
 
 				}
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/server/AcceptClient.java	Sat Dec 21 18:46:54 2013 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/server/AcceptClient.java	Tue Dec 31 09:13:07 2013 +0900
@@ -22,11 +22,6 @@
 	public AcceptClient() {
 		// this.name = name;
 	}
-
-	/*
-	 * public AcceptClient() { new CreateThread(this); }
-	 */
-
 	public void transferParentAddrerss(BufferedReader is, PrintStream os) {
 		try {
 			while (true) {
@@ -145,7 +140,8 @@
 	private void replyLeaderNode(PrintStream os, BufferedReader is, String port, int treeNumber) throws IOException,
 			InterruptedException {
 		String lastNode = ls.getLast();
-		if(lastNode != ls.get(treeNumber)){
+		String checkSameHost = ls.get(treeNumber);
+		if(lastNode != checkSameHost){
 			os.println(lastNode);
 		}
 		replyNodeInformation(port);
@@ -153,12 +149,13 @@
 		passCheck = 1;
 		reportLastNode(lastNode, newparent, port, String.valueOf(parentnum), sendleaderflag);
 		listupdate(port);
-		if(lastNode != ls.get(treeNumber)) {
-			os.println(port);
+		if(lastNode != checkSameHost) {
+			os.println(this.port);
 			os.println(treeNumber);
 		}
 		leaderflag = decisionLeader(treeNumber, treebranch);
-		lostNodeConnection(treeNumber, lastNode, port);
+		if(ls.size() > treeNumber +1)
+			lostNodeConnection(treeNumber, lastNode, this.port);
 		Thread.sleep(intv_time);
 		is.close();
 		os.close();
@@ -175,9 +172,10 @@
 				DataOutputStream os = new DataOutputStream(clients.getOutputStream());
 				System.out.println("hostnode" + hostNode + "::port" + port);
 				os.writeBytes(hostNode + "\n");
-				// os.writeBytes(port+"\n");
+				os.writeBytes(port+"\n");
 				os.writeBytes(String.valueOf(treeNum + 1) + "\n");
 				os.close();
+				clients.close();
 			}
 		}
 	}
@@ -240,10 +238,8 @@
 			System.out.println(newchild + "connect");
 			// echoSocket = new Socket(newchild, 10001 + (i + 1));
 			echoSocket = new Socket(newchild, 10001);
-			DataOutputStream os = new DataOutputStream(
-					echoSocket.getOutputStream());
-			BufferedReader is = new BufferedReader(new InputStreamReader(
-					echoSocket.getInputStream()));
+			DataOutputStream os = new DataOutputStream(echoSocket.getOutputStream());
+			BufferedReader is = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
 			os.writeBytes(newparent + "\n");
 			os.writeBytes(this.port+"\n");
 			os.writeBytes(newpnum + "\n");
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/server/GetBroadCastProxy.java	Sat Dec 21 18:46:54 2013 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/server/GetBroadCastProxy.java	Tue Dec 31 09:13:07 2013 +0900
@@ -22,7 +22,7 @@
 
 	public GetBroadCastProxy(VncProxyService _vps,String desktopName,String host){
 		vps = _vps;
-		bCast = new BroadCastProxy(vps.myRfb.getAcceptPort()+":"+host+":"
+		bCast = new BroadCastProxy(vps.getRfb().getAcceptPort()+":"+host+":"
 				+desktopName+":"+getMyAddress()+":");
 	}
 	
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/server/MyRfbProtoProxy.java	Sat Dec 21 18:46:54 2013 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/server/MyRfbProtoProxy.java	Tue Dec 31 09:13:07 2013 +0900
@@ -311,6 +311,8 @@
 				bufs.addFirst(header);
 				// if(dataLen<=64000)
 				multicastqueue.put(bufs);
+
+
 				// is.reset();
 
 				/*
@@ -522,5 +524,15 @@
 		byte[] b = new byte[0];
 		in.readBytes(b);
 	}
+	
+	@Override
+	public boolean getReadyReconnect() {
+		return readyReconnect;
+	}
+	
+	@Override
+	public void setReadyReconnect(boolean ready) {
+		readyReconnect = ready;
+	}
 
 }
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/server/VncProxyService.java	Sat Dec 21 18:46:54 2013 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/server/VncProxyService.java	Tue Dec 31 09:13:07 2013 +0900
@@ -67,7 +67,7 @@
 		logger.info("TightVNC Viewer version " + ver());
 		isApplet = false;
 	}
-
+	
 	public VncProxyService() {
 	//	connectionParams = new ConnectionParams();
 		settings = ProtocolSettings.getDefaultSettings();
@@ -101,22 +101,15 @@
 			System.exit(0);
 		}
 		VncProxyService vps = new VncProxyService();
-		vps.initProxy1(argv, mainArgs, parser);
+		vps.initProxy1("localhost");
 	}
 
-	private void initProxy1(String[] argv, String[] mainArgs, Parser parser) {
+	private void initProxy1(String hostName) {
 		myRfb = new MyRfbProtoProxy();
-		initProxy(parser);
-		if (mainArgs.length != 0) {
-			for (int i = 0; i < argv.length; i++) {
-				setArguments(mainArgs);
-				// write later
-			}
-		} else {
-			// getHostData();
-		}
+		aClient = new AcceptClient();
+		isApplet = false;
 		setIsTreeVNC(true);
-		setConnectionParam("localhost",5900);
+		setConnectionParam(hostName,5900);
 		isApplet = true;
 		run();
 		createConnectionAndStart();
@@ -171,7 +164,7 @@
 			printUsage(parser.optionsUsage());
 			System.exit(0);
 		}
-		initProxy1(argv, mainArgs, parser);
+		initProxy1("localhost");
 	}
 
 	@Override
@@ -209,11 +202,12 @@
 									new InputStreamReader(
 											clientSocket.getInputStream()));
 							String newHostName = is.readLine();
-							int width = Integer.parseInt(is.readLine());
-							int height = Integer.parseInt(is.readLine());
+							//int width = Integer.parseInt(is.readLine());
+							//int height = Integer.parseInt(is.readLine());
 							// String screenSize = is.readLine();
+							System.out.println(newHostName);
 							if (permitChangeScreen()) {
-								changeVNCServer(newHostName, width, height);
+								changeVNCServer(newHostName, 3200, 1980);
 							} else {
 								continue;
 							}
@@ -246,10 +240,10 @@
 		boolean passFlag = false;
 		for (String client : clientList) {
 			if (passFlag) {
-				Socket echoSocket;
-				echoSocket = new Socket(client, 10001);
+				Socket echoSocket = new Socket(client, 10001);
 				DataOutputStream os = new DataOutputStream(
 						echoSocket.getOutputStream());
+				System.out.println(client);
 				os.writeBytes("reconnection\n");
 				os.writeBytes(port + "\n");
 				os.close();
@@ -275,16 +269,35 @@
 		// newVps.fbWidth = width;
 		// newVps.fbHeight = height;
 		// run call and change workingProtocol
-		newVps.connectionParams.setHostName(hostName);
+		newVps.setConnectionParam(hostName, 5900);
+		newVps.initProxy1(hostName);
+		orderRecconection(newVps ,hostName);
 		socketClose();
-		newVps.createConnectionAndStart();
-		newVps.createSocketAndSend(aClient.getList(), hostName,
-				String.valueOf(newVps.opendPort));
 	}
 
 	@Override
 	public void settingsChanged(SettingsChangedEvent event) {
 
 	}
-
+	
+	public void orderRecconection(VncProxyService vps,String hostName) throws UnknownHostException, IOException {
+		int count  = 0;
+		while(true) {
+			if(vps.myRfb.getReadyReconnect()) {
+				vps.createSocketAndSend(aClient.getList(), hostName, String.valueOf(vps.opendPort));
+				break;
+			} else {
+				try {
+					Thread.sleep(500);
+				} catch (InterruptedException e) {
+					e.printStackTrace();
+				}
+				if(count++ > 40) {
+					break;
+				} else {
+					continue;
+				}
+			}
+		}
+	}
 }
--- a/src/viewer_swing/java/com/glavsoft/viewer/TreeViewer.java	Sat Dec 21 18:46:54 2013 +0900
+++ b/src/viewer_swing/java/com/glavsoft/viewer/TreeViewer.java	Tue Dec 31 09:13:07 2013 +0900
@@ -20,12 +20,12 @@
 			vps.proxyStart(args,width,height);
 		} else if (viewer) {
 			Viewer v = new Viewer();
-			v.startViewer(args);
+			v.startViewer();
 		} else {
 			//MyVncClient mvc = new MyVncClient();
 			//mvc.startClient(args);
 			Viewer v = new Viewer();
-			v.startViewer(args);
+			v.startViewer();
 		}
 	}
 
--- a/src/viewer_swing/java/com/glavsoft/viewer/Viewer.java	Sat Dec 21 18:46:54 2013 +0900
+++ b/src/viewer_swing/java/com/glavsoft/viewer/Viewer.java	Tue Dec 31 09:13:07 2013 +0900
@@ -44,6 +44,7 @@
 import java.util.jar.Manifest;
 import java.util.logging.*;
 
+import jp.ac.u_ryukyu.treevnc.AcceptThread;
 import jp.ac.u_ryukyu.treevnc.CreateConnectionParam;
 import jp.ac.u_ryukyu.treevnc.MyRfbProto;
 import jp.ac.u_ryukyu.treevnc.client.GetDataClient;
@@ -66,7 +67,7 @@
     private volatile boolean isAppletStopped = false;
     private ConnectionPresenter connectionPresenter;
     private boolean isTreeVNC = false;
-    public MyRfbProto myRfb;
+    protected MyRfbProto myRfb;
 
     public static void main(String[] args) {
 		Parser parser = new Parser();
@@ -232,7 +233,7 @@
         }
         
         SwingViewerWindowFactory viewerWindowFactory = new SwingViewerWindowFactory(isSeparateFrame, isApplet, this);
-
+        
         connectionPresenter.setConnectionWorkerFactory(
                 new SwingConnectionWorkerFactory(connectionView.getFrame(), passwordFromParams, connectionPresenter, viewerWindowFactory, myRfb));
 
@@ -274,9 +275,12 @@
 		// must write
 	}
 
-	public void setSocket(Socket soc) {
-		// TODO Auto-generated method stub
-		
+	public void setSocket(Socket soc) { 
+		System.out.println("----------------------------"+soc.getInetAddress().getHostAddress());
+		System.out.println("----------------------------"+soc.getPort());
+		setConnectionParam(soc.getInetAddress().getHostAddress(),soc.getPort());
+		//Thread accThread = new Thread(new AcceptThread(myRfb, soc.getPort()));
+		//accThread.start();
 	}
 
 	public void setOpenPort(int parseInt) {
@@ -285,16 +289,18 @@
 	}
 
 	public void setTeminationType(boolean b) {
-		// TODO Auto-generated method stub
+		myRfb.setTerminationType(b);
 	}
 	
-	public void startViewer(String[] args) {
+	public void startViewer() {
 		Viewer viewer = new Viewer();
-		CreateConnectionParam cp = new CreateConnectionParam(new MyRfbProtoClient());
+		MyRfbProtoClient rfb = new MyRfbProtoClient();
+		CreateConnectionParam cp = new CreateConnectionParam(rfb);
 		cp.communicationToProxy();
 		cp.createConnectionParam(viewer);
 		viewer.isTreeVNC = true;
-		
+		rfb.setViewer(viewer);
+		viewer.myRfb =  rfb;
 		SwingUtilities.invokeLater(viewer);
 		
 	}
@@ -307,6 +313,10 @@
 	public void setIsTreeVNC(boolean flag) {
 		isTreeVNC = flag;
 	}
+	
+	public MyRfbProto getRfb() {
+		return myRfb;
+	}
 }
 
     
--- a/src/viewer_swing/java/com/glavsoft/viewer/swing/SwingRfbConnectionWorker.java	Sat Dec 21 18:46:54 2013 +0900
+++ b/src/viewer_swing/java/com/glavsoft/viewer/swing/SwingRfbConnectionWorker.java	Tue Dec 31 09:13:07 2013 +0900
@@ -45,6 +45,7 @@
 import java.util.logging.Logger;
 
 import jp.ac.u_ryukyu.treevnc.MyRfbProto;
+import jp.ac.u_ryukyu.treevnc.client.MyRfbProtoClient;
 import jp.ac.u_ryukyu.treevnc.server.MyRfbProtoProxy;
 
 /**
@@ -116,8 +117,13 @@
                     workingProtocol, rfbSettings, uiSettings, connectionString, presenter);
             if(myRfb instanceof MyRfbProtoProxy)
             	workingProtocol.startNormalHandling(this, viewerWindow.getSurface(), clipboardController, myRfb);
-            else
+            else if(myRfb instanceof MyRfbProtoClient) {
+				myRfb.setProtocolContext(workingProtocol);
+				myRfb.notProxy();
+            	workingProtocol.startTreeClientHandling(this, viewerWindow.getSurface(), clipboardController,myRfb);
+            } else {
             	workingProtocol.startNormalHandling(this, viewerWindow.getSurface(), clipboardController);
+            }
             presenter.showMessage("Started");
 
             presenter.successfulRfbConnection();
--- a/src/viewer_swing/java/com/glavsoft/viewer/swing/SwingViewerWindow.java	Sat Dec 21 18:46:54 2013 +0900
+++ b/src/viewer_swing/java/com/glavsoft/viewer/swing/SwingViewerWindow.java	Tue Dec 31 09:13:07 2013 +0900
@@ -42,6 +42,7 @@
 import javax.swing.border.EmptyBorder;
 import java.awt.*;
 import java.awt.event.*;
+import java.io.IOException;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.concurrent.Executors;
@@ -50,6 +51,8 @@
 import java.util.concurrent.TimeUnit;
 import java.util.logging.Logger;
 
+import jp.ac.u_ryukyu.treevnc.server.MyRfbProtoProxy;
+
 public class SwingViewerWindow implements IChangeSettingsListener {
 	public static final int FS_SCROLLING_ACTIVE_BORDER = 20;
 	private JToggleButton zoomFitButton;
@@ -164,7 +167,11 @@
 //			frame.pack();
             outerPanel.setSize(surface.getPreferredSize());
             internalPack(null);
-            frame.setVisible(true);
+            if(viewer.getRfb() instanceof MyRfbProtoProxy)
+            	frame.setVisible(false);
+            else 
+            	frame.setVisible(true);
+            //frame.setVisible(false);
             frame.validate();
 		} else {
             appletWindow.setLayout(new BorderLayout(0, 0));
@@ -799,6 +806,18 @@
                     }
                 });
         kbdButtons.add(altButton);
+        
+        JButton screenButton = buttonsBar.createButton("display", "change screen", new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+               try {
+				viewer.getRfb().screenChangeRequest();
+			} catch (IOException e1) {
+				e1.printStackTrace();
+			}
+            }
+        });
+        kbdButtons.add(screenButton);
 
         ModifierButtonEventListener modifierButtonListener = new ModifierButtonEventListener();
         modifierButtonListener.addButton(KeyEvent.VK_CONTROL, ctrlButton);