# HG changeset patch # User one # Date 1383382510 -32400 # Node ID 986f16afb753b16800fe5e4f0ecdf7d4fc54897f # Parent eb34277a22ff41bf88daffe568ea3822b5877dfa update before change host. diff -r eb34277a22ff -r 986f16afb753 src/main/java/com/glavsoft/rfb/encoding/decoder/FramebufferUpdateRectangle.java --- a/src/main/java/com/glavsoft/rfb/encoding/decoder/FramebufferUpdateRectangle.java Wed Aug 07 18:00:54 2013 +0900 +++ b/src/main/java/com/glavsoft/rfb/encoding/decoder/FramebufferUpdateRectangle.java Sat Nov 02 17:55:10 2013 +0900 @@ -43,7 +43,6 @@ public int width; public int height; private EncodingType encodingType; - private boolean firstFlag=false; public FramebufferUpdateRectangle() { // nop @@ -57,14 +56,8 @@ public void fill(Reader reader) throws TransportException { x = reader.readUInt16(); y = reader.readUInt16(); - if(!firstFlag) { - width = reader.readUInt16()-2; - height = reader.readUInt16()-2; - firstFlag=true; - } else { - width = reader.readUInt16(); - height = reader.readUInt16(); - } + width = reader.readUInt16(); + height = reader.readUInt16(); int encoding = reader.readInt32(); encodingType = EncodingType.byId(encoding); } diff -r eb34277a22ff -r 986f16afb753 src/main/java/com/glavsoft/rfb/protocol/Protocol.java --- a/src/main/java/com/glavsoft/rfb/protocol/Protocol.java Wed Aug 07 18:00:54 2013 +0900 +++ b/src/main/java/com/glavsoft/rfb/protocol/Protocol.java Sat Nov 02 17:55:10 2013 +0900 @@ -265,7 +265,7 @@ @Override public void sendRefreshMessage() { // sendMessage(new FramebufferUpdateRequestMessage(0, 0, fbWidth, fbHeight, false)); - sendMessage(new FramebufferUpdateRequestMessage(0, 0, 1006, 506, false)); + sendMessage(new FramebufferUpdateRequestMessage(0, 0, 1006, 506, true)); logger.fine("sent: full FB Refresh"); } diff -r eb34277a22ff -r 986f16afb753 src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java --- a/src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java Wed Aug 07 18:00:54 2013 +0900 +++ b/src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java Sat Nov 02 17:55:10 2013 +0900 @@ -86,7 +86,7 @@ renderer = repaintController.createRenderer(reader, context.getFbWidth(), context.getFbHeight(), context.getPixelFormat()); fullscreenFbUpdateIncrementalRequest = - new FramebufferUpdateRequestMessage(0, 0, context.getFbWidth(), context.getFbHeight(), false); + new FramebufferUpdateRequestMessage(0, 0, context.getFbWidth(), context.getFbHeight(), true); } @Override @@ -125,6 +125,7 @@ EchoClient echo = rfb.getEcho(); echo.openport(); while(true) { + // after set time out. not counter. if(counter > 3) { echo.notfoundParent(); } diff -r eb34277a22ff -r 986f16afb753 src/main/java/jp/ac/u_ryukyu/treevnc/AcceptThread.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/AcceptThread.java Wed Aug 07 18:00:54 2013 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/AcceptThread.java Sat Nov 02 17:55:10 2013 +0900 @@ -51,6 +51,7 @@ * 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); @@ -59,4 +60,5 @@ is.reset(); return false; } + */ } diff -r eb34277a22ff -r 986f16afb753 src/main/java/jp/ac/u_ryukyu/treevnc/MyRfbProto.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/MyRfbProto.java Wed Aug 07 18:00:54 2013 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/MyRfbProto.java Sat Nov 02 17:55:10 2013 +0900 @@ -3,7 +3,6 @@ import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket; -import java.net.UnknownHostException; import java.nio.ByteBuffer; import java.util.LinkedList; import java.util.concurrent.atomic.AtomicInteger; @@ -356,5 +355,10 @@ public void setProxyAddr(String proxyAddr) { this.proxyAddr = proxyAddr; } + + + public void close() { + //nothing + } } diff -r eb34277a22ff -r 986f16afb753 src/main/java/jp/ac/u_ryukyu/treevnc/client/EchoClient.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/client/EchoClient.java Wed Aug 07 18:00:54 2013 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/client/EchoClient.java Sat Nov 02 17:55:10 2013 +0900 @@ -3,7 +3,6 @@ import java.io.*; import java.net.*; - import com.glavsoft.viewer.Viewer; public class EchoClient { @@ -83,21 +82,18 @@ return true; } sendDataProxy(); - String checkRepetition = getProxyData2(is); - if (checkRepetition.equals("stop")) { - return true; - } - if (!(waitReply.checkPath())) { - Thread.sleep(1000); +// String checkRepetition = getProxyData2(is); +// if (checkRepetition.equals("stop")) { +// return true; +// } +// if (!(waitReply.checkPath())) { reConnectionMain(echoSocket); streamClose(); - } +// } } catch (UnknownHostException e) { System.err.println("Trying to connect to unknown host: " + e); } catch (IOException e) { return false; - } catch (InterruptedException e) { - e.printStackTrace(); } catch (NullPointerException e) { openport(); System.out.println("notFoundParents"); @@ -155,16 +151,38 @@ } String getProxyData2(BufferedReader is) throws IOException { - String checkRepetition; - System.out.println("-------------------re----------------------------"); - if ((parentAddress = is.readLine()) != null) { - System.out.println("Server: " + parentAddress); - } - if ((parentNum = is.readLine()) != null) { - System.out.println("parent:test " + parentNum); - } - if ((checkRepetition = is.readLine()) != null) { - System.out.println("checkRepetition: " + checkRepetition); + String checkRepetition = null; + 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----------------------------"); + if ((parentAddress = isNotLeader.readLine()) != null) { + System.out.println("Server: " + parentAddress); + } + if ((parentNum = isNotLeader.readLine()) != null) { + System.out.println("parent:test " + parentNum); + } + if ((checkRepetition = isNotLeader.readLine()) != null) { + System.out.println("checkRepetition: " + checkRepetition); + } + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } else { + System.out.println("-------------------re----------------------------"); + if ((parentAddress = is.readLine()) != null) { + System.out.println("Server: " + parentAddress); + } + if ((parentNum = is.readLine()) != null) { + System.out.println("parent:test " + parentNum); + } + if ((checkRepetition = is.readLine()) != null) { + System.out.println("checkRepetition: " + checkRepetition); + } } return checkRepetition; } @@ -173,7 +191,8 @@ while (true) { try { client.close(); - client.setSocket(createSocketForClient(echoSocket)); + // set Socket for connection in VncViewer. + client.setSocket(createSocketForClient(echoSocket,false)); client.run(); break; } catch (IOException e) { @@ -193,8 +212,8 @@ sendDataProxy("1", parentNum, treeNum); System.out.println("---------------------------------------------"); } else { - sendDataProxy("3", parentNum, treeNum); - System.out.println("---------------------------------------------"); + // sendDataProxy("3", parentNum, treeNum); + // System.out.println("---------------------------------------------"); } } @@ -228,36 +247,62 @@ public void setViewer(Viewer v) { client = v; } - + public String getMyAddress() { return myAddress; } - public Socket createSocketForClient(Socket soc) throws IOException { - BufferedReader is = new BufferedReader(new InputStreamReader( - soc.getInputStream())); - int count=0; - String tempParentAddress = is.readLine(); - parentNum = is.readLine(); + // create scoket for ReConnection. + public Socket createSocketForClient(Socket soc,boolean flag) throws IOException { + Socket socket = null; + String parentAddress; +// int count = 0; + if("1".equals(leaderFlag)||flag) { // leader only + BufferedReader is = new BufferedReader(new InputStreamReader( + soc.getInputStream())); + parentAddress = is.readLine(); + is.readLine();// parentNum + } else { // other client + ServerSocket waitReplyServer = new ServerSocket(9999); + Socket socketForWait = waitReplyServer.accept(); + BufferedReader isNotLeader = new BufferedReader(new InputStreamReader( + socketForWait.getInputStream())); + System.out.println("-------------------renode----------------------------"); + parentAddress = isNotLeader.readLine(); + if ((parentNum = isNotLeader.readLine()) != null) { + System.out.println("parent:test " + parentNum); + } + isNotLeader.readLine(); + } + socket = new Socket(parentAddress, 5999); + socket.setReuseAddress(true); + /* + //String tempParentAddress = is.readLine(); + //is.readLine();// parentNum if ("reconnection".equals(tempParentAddress)) { System.out.println("-----------------into function \n" + parentNum); - while(true) - try{ - return new Socket(parentAddress, Integer.parseInt(parentNum)); - } catch(IOException e) { + while (true) + try { + return new Socket(parentAddress, + Integer.parseInt(parentNum)); + } catch (IOException e) { try { Thread.sleep(1000); } catch (InterruptedException e1) { e1.printStackTrace(); } - if(count++ > 5) break; + if (count++ > 5) + break; continue; } } - treeNum = is.readLine(); - leaderFlag = is.readLine(); - return new Socket(tempParentAddress, 5999); + //is.readLine();// treeNum + //is.readLine();// leaderFlag + */ + + return socket; } + public String getParentsAddress() { return parentAddress; } diff -r eb34277a22ff -r 986f16afb753 src/main/java/jp/ac/u_ryukyu/treevnc/client/MyRfbProtoClient.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/client/MyRfbProtoClient.java Wed Aug 07 18:00:54 2013 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/client/MyRfbProtoClient.java Sat Nov 02 17:55:10 2013 +0900 @@ -73,6 +73,7 @@ @Override public Socket accept() throws IOException { + servSock.setReuseAddress(true); return servSock.accept(); } @@ -86,6 +87,7 @@ int port = p; while (true) { try { +// Thread.sleep(1000); initServSock(port); break; } catch (BindException e) { @@ -373,5 +375,16 @@ public boolean getTerminationType() { return normalTermination; } + + @Override + public void close() { + try { + servSock.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + } diff -r eb34277a22ff -r 986f16afb753 src/main/java/jp/ac/u_ryukyu/treevnc/client/MyVncClient.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/client/MyVncClient.java Wed Aug 07 18:00:54 2013 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/client/MyVncClient.java Sat Nov 02 17:55:10 2013 +0900 @@ -22,7 +22,6 @@ * */ private static final long serialVersionUID = 1L; - boolean isClient = false; public static final int DEFAULT_PORT = 5900; public static Logger logger = Logger.getLogger("com.glavsoft"); private ConnectionParams connectionParams; @@ -36,6 +35,7 @@ settings = ProtocolSettings.getDefaultSettings(); uiSettings = super.uiSettings; treeConnectionManager = new TreeConnectionManager(this, isApplet); + setIsClient(true); } public MyVncClient(Parser parser) { diff -r eb34277a22ff -r 986f16afb753 src/main/java/jp/ac/u_ryukyu/treevnc/client/WaitReply.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/client/WaitReply.java Wed Aug 07 18:00:54 2013 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/client/WaitReply.java Sat Nov 02 17:55:10 2013 +0900 @@ -1,7 +1,7 @@ package jp.ac.u_ryukyu.treevnc.client; +import java.io.DataOutputStream; import java.io.IOException; -import java.io.OutputStream; import java.net.BindException; import java.net.ServerSocket; import java.net.Socket; @@ -23,6 +23,11 @@ return passflag; } + private void reportConnectionFinished(Socket soc) throws IOException { + DataOutputStream os = new DataOutputStream(soc.getOutputStream()); + os.writeBytes("finished"); + } + public void run() { Socket clientSocket = null; ServerSocket echoServer = null; @@ -35,12 +40,14 @@ echo.client.stopTask(); echo.client.close(); passflag = true; - System.out.println("------waitreply"); - echo.client.setSocket(echo.createSocketForClient(clientSocket)); - // hult(); - // client.init(); + echo.client.setSocket(echo.createSocketForClient(clientSocket,true)); + //client.init(); echo.client.run(); echoServer.close(); + //report finished connection at server. + reportConnectionFinished(clientSocket); + clientSocket.close(); + } } catch (BindException e) { break; @@ -51,10 +58,12 @@ } } + /* private void hult() throws IOException { Socket socket = new Socket("localhsot", echo.client.getPort()); OutputStream stream = socket.getOutputStream(); stream.write("halt".getBytes()); stream.flush(); } + */ } diff -r eb34277a22ff -r 986f16afb753 src/main/java/jp/ac/u_ryukyu/treevnc/server/AcceptClient.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/server/AcceptClient.java Wed Aug 07 18:00:54 2013 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/server/AcceptClient.java Sat Nov 02 17:55:10 2013 +0900 @@ -7,12 +7,11 @@ import java.util.*; public class AcceptClient { - private int counter = 0, parentnum = 0; + private int nodeCounter = 0, parentnum = 0; private LinkedList ls = new LinkedList(); private boolean addrRegistor = true; - private int passNumber=0,numberZone; + //private int passNumber=0,numberZone; boolean runflag = false; - //private String name; private int passCheck = 0; private final int treebranch = 2; private String newparent,request,myAddress; @@ -32,8 +31,7 @@ } */ - // public synchronized void transferParentAddrerss(BufferedReader - // is,PrintStream os) { + public void transferParentAddrerss(BufferedReader is,PrintStream os) { try { while (true) { @@ -149,13 +147,15 @@ } private void replyLeaderNode(PrintStream os,BufferedReader is,String port,String treeNumber) throws IOException, InterruptedException { - os.println(ls.getLast()); + String host = ls.getLast(); + System.out.println("send for leadernode"+ host); + os.println(host); replyNodeInformation(port); - counter--; + nodeCounter--; passCheck = 1; reportLastNode(ls.getLast(), newparent,port, String.valueOf(parentnum),sendleaderflag); listupdate(port); - waitThread(); + // waitThread(); /* if (Integer.parseInt(treeNumber)==ls.size()-1) return; @@ -163,12 +163,28 @@ //displyLinkedList(ls); os.println(port); leaderflag = decisionLeader(Integer.parseInt(treeNumber),treebranch); + lostNodeConnection(Integer.parseInt(treeNumber),host,port,treeNumber); os.println(treeNumber); Thread.sleep(intv_time); is.close(); os.close(); } + private void lostNodeConnection(int treeNum,String hostNode,String port,String treeNumber) throws UnknownHostException, IOException { + for(int i = 1; i < treebranch; i++) { + String host =ls.get(treeNum+i); + System.out.println("connection socket for-------------------- " + host ); + Socket clients = new Socket(host, 9999); + clients.setReuseAddress(true); + DataOutputStream os = new DataOutputStream(clients.getOutputStream()); + System.out.println("hostnode"+hostNode+"::port" + port); + os.writeBytes(hostNode+"\n"); + os.writeBytes(port+"\n"); + os.writeBytes(String.valueOf(treeNum+1)+"\n"); + os.close(); + } + } + private void replyNormalChildren(PrintStream os,BufferedReader is,String port,String treeNumber,boolean flag) throws IOException, InterruptedException { if(flag) notifyThread(); @@ -196,22 +212,22 @@ if (line != null) { addClientAdress(line, ls); - counter++; + nodeCounter++; } else { return true; } - if (counter >= treebranch + 1) { - leaderflag = decisionLeader(counter, treebranch); - parentnum = (counter - 1) / treebranch; + if (nodeCounter >= treebranch + 1) { + leaderflag = decisionLeader(nodeCounter, treebranch); + parentnum = (nodeCounter - 1) / treebranch; request = ls.get(parentnum); System.out.println(parentnum); outputStream(os, request,String.valueOf(parentnum), - String.valueOf(counter), leaderflag); - checkParameter(parentnum, counter, leaderflag); + String.valueOf(nodeCounter), leaderflag); + checkParameter(parentnum, nodeCounter, leaderflag); } else { outputStream(os, myAddress, "0", - String.valueOf(counter), leaderflag); + String.valueOf(nodeCounter), leaderflag); } Thread.sleep(intv_time); return false; @@ -225,10 +241,14 @@ // 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())); os.writeBytes(newparent + "\n"); os.writeBytes(newpnum + "\n"); - os.writeBytes(newtreenum + "\n"); - os.writeBytes(newleaderflag + "\n"); +// os.writeBytes(newtreenum + "\n"); +// os.writeBytes(newleaderflag + "\n"); + // wait for last node connection. + is.readLine(); + is.close(); os.close(); } catch (UnknownHostException e) { System.err.println("Don't know about host: localhost"); @@ -252,23 +272,22 @@ } } - + + /* + // previous viersion for reconnection. synchronized void checkWait(PrintStream os,BufferedReader is,String port,int treeNum) throws InterruptedException, IOException { final int TIMEOUT = 3000; if (passNumber == 0) { passNumber++; numberZone = ((treeNum - 1) / treebranch); - //System.out.println(treeNum + "--wait--"); replyLeaderNode(os,is,port,String.valueOf(treeNum)); notifyAll(); passNumber = 0; } else if (numberZone == ((treeNum - 1) / treebranch)) { if (++passNumber == treebranch) { - //System.out.println(treeNum + "--notify--"); passNumber = 0; replyNormalChildren(os,is,port,String.valueOf(treeNum),true); } else { - //System.out.println(treeNum + "--waityobi--"); replyNormalChildren(os,is,port,String.valueOf(treeNum),false); wait(TIMEOUT); } @@ -277,6 +296,12 @@ checkWait(os,is,port,treeNum); } } + */ + + + synchronized void checkWait(PrintStream os,BufferedReader is,String port,int treeNum) throws InterruptedException, IOException { + replyLeaderNode(os,is,port,String.valueOf(treeNum)); + } private void waitThread() { final int TIMEOUT = 3000; diff -r eb34277a22ff -r 986f16afb753 src/main/java/jp/ac/u_ryukyu/treevnc/server/VncProxyService.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/server/VncProxyService.java Wed Aug 07 18:00:54 2013 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/server/VncProxyService.java Sat Nov 02 17:55:10 2013 +0900 @@ -43,7 +43,6 @@ private ConnectionManager connectionManager; private ConnectionParams connectionParams; - boolean isClient = false; public static final int DEFAULT_PORT = 5900; public static Logger logger = Logger.getLogger("com.glavsoft"); private boolean forceReconnection; @@ -77,6 +76,7 @@ settings = ProtocolSettings.getDefaultSettings(); uiSettings = super.uiSettings; connectionParams.hostName = "localhost"; + setIsClient(false); } diff -r eb34277a22ff -r 986f16afb753 src/viewer_swing/java/com/glavsoft/viewer/ConnectionManager.java --- a/src/viewer_swing/java/com/glavsoft/viewer/ConnectionManager.java Wed Aug 07 18:00:54 2013 +0900 +++ b/src/viewer_swing/java/com/glavsoft/viewer/ConnectionManager.java Sat Nov 02 17:55:10 2013 +0900 @@ -140,6 +140,7 @@ socket = new Socket(connectionParams.hostName, connectionParams.portNumber); wasError = false; + socket.setReuseAddress(true); } catch (UnknownHostException e) { Viewer.logger.severe("Unknown host: " + connectionParams.hostName); diff -r eb34277a22ff -r 986f16afb753 src/viewer_swing/java/com/glavsoft/viewer/ContainerManager.java --- a/src/viewer_swing/java/com/glavsoft/viewer/ContainerManager.java Wed Aug 07 18:00:54 2013 +0900 +++ b/src/viewer_swing/java/com/glavsoft/viewer/ContainerManager.java Sat Nov 02 17:55:10 2013 +0900 @@ -88,7 +88,7 @@ container.setLayout(new BorderLayout(0, 0)); container.add(scroller, BorderLayout.CENTER); - if (isSeparateFrame) { + if (isSeparateFrame && viewer.getIsClient()) { // frame.pack(); outerPanel.setSize(surface.getPreferredSize()); internalPack(null); diff -r eb34277a22ff -r 986f16afb753 src/viewer_swing/java/com/glavsoft/viewer/TreeViewer.java --- a/src/viewer_swing/java/com/glavsoft/viewer/TreeViewer.java Wed Aug 07 18:00:54 2013 +0900 +++ b/src/viewer_swing/java/com/glavsoft/viewer/TreeViewer.java Sat Nov 02 17:55:10 2013 +0900 @@ -66,7 +66,7 @@ private boolean isInteger(String num) { try { - int n = Integer.parseInt(num); + Integer.parseInt(num); return true; } catch (NumberFormatException e) { return false; diff -r eb34277a22ff -r 986f16afb753 src/viewer_swing/java/com/glavsoft/viewer/Viewer.java --- a/src/viewer_swing/java/com/glavsoft/viewer/Viewer.java Wed Aug 07 18:00:54 2013 +0900 +++ b/src/viewer_swing/java/com/glavsoft/viewer/Viewer.java Sat Nov 02 17:55:10 2013 +0900 @@ -72,6 +72,7 @@ private ContainerManager containerManager; protected ConnectionManager connectionManager; private MyRfbProto rfb; + protected boolean isClient; public Protocol getWorkingProtocol() { return workingProtocol; @@ -293,7 +294,7 @@ break; } logger.info("Connected"); - System.out.println("-------------"+connectionParams.hostName); + System.out.println("connection-----------" + workingSocket.getInetAddress()); try { workingSocket.setTcpNoDelay(true); // disable Nagle algorithm Reader reader = new Reader(workingSocket.getInputStream()); @@ -667,6 +668,7 @@ public void close() { try { + rfb.close(); workingProtocol.getWriter().close(); workingProtocol.getReader().close(); cleanUpUISessionAndConnection(); @@ -688,4 +690,13 @@ public void setTeminationType(boolean setType) { rfb.setTerminationType(true); } + + public boolean getIsClient() { + return isClient; + } + + public void setIsClient(boolean flag) { + isClient = flag; + } + }