# HG changeset patch # User oc # Date 1400497052 -32400 # Node ID 75879c316796513af041d789afbb86158b517e5d # Parent 7b8d3411270aafd31494fb16f3dba0e4291c9121 synchronized wait for Rfb initialization in change server. diff -r 7b8d3411270a -r 75879c316796 src/main/java/jp/ac/u_ryukyu/treevnc/MyRfbProto.java --- 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(); + } + } + } diff -r 7b8d3411270a -r 75879c316796 src/main/java/jp/ac/u_ryukyu/treevnc/server/MyRfbProtoProxy.java --- 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 list, ByteBuffer header) { int block = (64*64*3)+1; // size of one-block. diff -r 7b8d3411270a -r 75879c316796 src/main/java/jp/ac/u_ryukyu/treevnc/server/VncProxyService.java --- 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 clientList() { diff -r 7b8d3411270a -r 75879c316796 src/main/java/jp/ac/u_ryukyu/treevnc/server/state/ChangeHost.java --- 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(); } } }