changeset 94:75879c316796

synchronized wait for Rfb initialization in change server.
author oc
date Mon, 19 May 2014 19:57:32 +0900
parents 7b8d3411270a
children c1c009a06c2e
files src/main/java/jp/ac/u_ryukyu/treevnc/MyRfbProto.java src/main/java/jp/ac/u_ryukyu/treevnc/server/MyRfbProtoProxy.java src/main/java/jp/ac/u_ryukyu/treevnc/server/VncProxyService.java src/main/java/jp/ac/u_ryukyu/treevnc/server/state/ChangeHost.java
diffstat 4 files changed, 29 insertions(+), 40 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/MyRfbProto.java	Mon May 19 19:14:18 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/MyRfbProto.java	Mon May 19 19:57:32 2014 +0900
@@ -9,6 +9,7 @@
 
 import jp.ac.u_ryukyu.treevnc.client.EchoClient;
 import jp.ac.u_ryukyu.treevnc.server.RequestScreenThread;
+import jp.ac.u_ryukyu.treevnc.server.VncProxyService;
 
 import com.glavsoft.exceptions.TransportException;
 import com.glavsoft.rfb.protocol.Protocol;
@@ -31,7 +32,7 @@
 	private EchoClient echo;
 	private String proxyAddr;
 	public int acceptPort;
-	protected boolean readyReconnect;
+	protected boolean readyReconnect = false;
 	private boolean cuiVersion; 
 	
 	public MyRfbProto() {
@@ -288,6 +289,7 @@
 	}
 	
 	byte initData[] = {7, -128, 4, 56, 32, 24, 0, 1, 0, -1, 0, -1, 0, -1, 16, 8, 0, 0, 0, 0, 0, 0, 0, 7, 102, 105, 114, 101, 102, 108, 121};
+	protected VncProxyService waiter;
 	private void sendInitData(Writer os) throws TransportException {
 		// In case of "-d" we have no context 
 		if (context != null){
@@ -380,9 +382,6 @@
 	public boolean getReadyReconnect() {
 		return readyReconnect;
 	}
-	
-	public void setReadyReconnect(boolean ready) {
-	}
 
 
 	public boolean getCuiVersion() {
@@ -401,4 +400,17 @@
 		return proxyAddr;
 	}
 	
+	public synchronized void setReadyReconnect(boolean ready) {
+		readyReconnect = ready;
+		if (ready) {
+			notifyAll();
+		}
+	}	
+
+	public synchronized void waitForReady(VncProxyService vncProxyService) throws InterruptedException {
+		while (!readyReconnect) {
+			wait();
+		}
+	}
+	
 }
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/server/MyRfbProtoProxy.java	Mon May 19 19:14:18 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/server/MyRfbProtoProxy.java	Mon May 19 19:57:32 2014 +0900
@@ -533,23 +533,9 @@
 		return readyReconnect;
 	}
 	
-	@Override
-	public void setReadyReconnect(boolean ready) {
-		readyReconnect = ready;
-	}
+
 	
-	/*
-	int a = list.size();
-	for(int i = 0; i < a -1; i++ ) {
-		if(i>6) {
-			if(i==7){
-				list.get(7).limit(20540);
-			}
-			list.remove(8);
-		}
-	}
-	*/
-	
+
 	@SuppressWarnings("unused")
     private void testScreenSize(LinkedList<ByteBuffer> list, ByteBuffer header) {
 		int block = (64*64*3)+1; // size of one-block.
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/server/VncProxyService.java	Mon May 19 19:14:18 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/server/VncProxyService.java	Mon May 19 19:57:32 2014 +0900
@@ -179,6 +179,8 @@
 				        }
 				    } catch (IOException e) {
 						continue; // log
+					} catch (InterruptedException e) {
+						continue;
 					}
 				}
 			}
@@ -229,9 +231,10 @@
 	 *            FrameWidth
 	 * @param height
 	 *            FrameHeight
+	 * @throws InterruptedException 
 	 */
 	public void changeVNCServer(String hostName, int width, int height)
-			throws UnknownHostException, IOException {
+			throws UnknownHostException, IOException, InterruptedException {
 		// sender and reader stop
 		VncProxyService newVps = new VncProxyService(this, hostName);
 		newVps.setFirstTime(false);
@@ -253,25 +256,9 @@
 		firstTime = flag;
 	}
 	
-	public void orderRecconection(VncProxyService vps,String hostName) throws UnknownHostException, IOException {
-		int count  = 0;
-		while(true) {
-			if(vps.myRfb.getReadyReconnect()) {
-				vps.sendReconnection(clients.getList(), hostName, String.valueOf(vps.opendPort));
-				break;
-			} else {
-				try {
-					Thread.sleep(500);
-				} catch (InterruptedException e) {
-					e.printStackTrace();
-				}
-				if(count++ > 40) {
-					break;
-				} else {
-					continue;
-				}
-			}
-		}
+	public void orderRecconection(VncProxyService vps,String hostName) throws UnknownHostException, IOException, InterruptedException {
+		vps.myRfb.waitForReady(this);
+		vps.sendReconnection(clients.getList(), hostName, String.valueOf(vps.opendPort));
 	}
 
 	public  LinkedList<String> clientList() {
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/server/state/ChangeHost.java	Mon May 19 19:14:18 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/server/state/ChangeHost.java	Mon May 19 19:57:32 2014 +0900
@@ -4,6 +4,7 @@
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.net.UnknownHostException;
+
 import jp.ac.u_ryukyu.treevnc.server.VncProxyService;
 
 public class ChangeHost implements Runnable {
@@ -45,6 +46,9 @@
 			}
 		} catch (IOException e) {
 			e.printStackTrace();
+		} catch (InterruptedException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
 		}
 	}
 }