changeset 329:230038d5127d

change reconnect new node instead of lost child node.
author oc
date Mon, 02 Feb 2015 20:18:53 +0900
parents 1a2ab6bd5ba3
children 9d1ed0099350
files src/main/java/jp/ac/u_ryukyu/treevnc/CreateConnectionParam.java src/main/java/jp/ac/u_ryukyu/treevnc/TreeManagement.java src/main/java/jp/ac/u_ryukyu/treevnc/TreeRFBProto.java src/main/java/jp/ac/u_ryukyu/treevnc/TreeVncCommand.java src/main/java/jp/ac/u_ryukyu/treevnc/TreeVncCommandChannelListener.java src/main/java/jp/ac/u_ryukyu/treevnc/TreeVncProtocol.java
diffstat 6 files changed, 23 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/CreateConnectionParam.java	Mon Feb 02 13:50:35 2015 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/CreateConnectionParam.java	Mon Feb 02 20:18:53 2015 +0900
@@ -13,6 +13,7 @@
 	
 	public CreateConnectionParam(TreeRFBProto rfb) {
 		this.rfb = rfb;
+        rfb.setConnectionParam(this);
 	}
 
 	public synchronized void findTreeVncRoot() {
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/TreeManagement.java	Mon Feb 02 13:50:35 2015 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/TreeManagement.java	Mon Feb 02 20:18:53 2015 +0900
@@ -101,11 +101,14 @@
     }
 
     public void fixLostChild(String hostname, int port, String myHostName, int clientId) {
+        System.out.println("fixLostChild");
         TreeVNCNode lostChildNode = lookup(nodeList, hostname, port);
         if (lostChildNode == null) return;
         TreeVNCNode deadChild = getChildNode(lostChildNode, clientId);
-        moveLastNodeToLostNodePosition(deadChild.getTreeNum());
-        lostNodeConnection(deadChild);
+        if (deadChild!=null) {
+            moveLastNodeToLostNodePosition(deadChild.getTreeNum());
+            lostNodeConnection(deadChild);
+        }
     }
 
     /**
@@ -113,6 +116,9 @@
      * @param oldParent
      */
     private void lostNodeConnection(TreeVNCNode oldParent) {
+        if (nodeList.size() < oldParent.getTreeNum()+1) {
+            return;
+        }
         TreeVNCNode newparent = nodeList.get(oldParent.getTreeNum());
         TreeVNCNode grandfather = getParentNode(newparent.getTreeNum());
 
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/TreeRFBProto.java	Mon Feb 02 13:50:35 2015 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/TreeRFBProto.java	Mon Feb 02 20:18:53 2015 +0900
@@ -52,6 +52,7 @@
     private TreeVncRootSelectionPanel rootSelectionPanel;
     private String vncInterface;
     public LinkedList<TreeVNCNode> nodeList;
+    public TreeRFBProto rfb;
 
     protected boolean readyReconnect = false;
     private boolean cuiVersion;
@@ -84,6 +85,7 @@
         nets.setMyRfb(this);
         this.isTreeManager = isTreeManager;
         this.viewer = viewer;
+        this.rfb = this;
 //        this.socket = createSocket();
         if(isTreeManager()) {
             getCast = new TreeRootFinderListener(viewer);
@@ -148,20 +150,15 @@
                             if (state != 1) {
                                 System.out.println("Client died " + myId);
                                 System.out.println("task stop");
-
-                                TreeVncProtocol echo = null;
-
                                 if (isTreeManager) {
 
-
                                 } else {
-                                    echo = new TreeVncProtocol(getConnectionParam().getHostName(), getConnectionParam().getPort());
-                                }
-
-                                if (echo!=null) {
+                                    TreeVncProtocol echo = new TreeVncProtocol(getConnectionParam().getHostName(), getConnectionParam().getPort());
                                     if (myId == 0) {
+                                        clients = myId;
                                         echo.lostLeftChild(getMyAddress(), getAcceptPort());
                                     } else if (myId == 1) {
+                                        clients = myId;
                                         echo.lostRightChild(getMyAddress(), getAcceptPort());
                                     }
                                 }
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/TreeVncCommand.java	Mon Feb 02 13:50:35 2015 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/TreeVncCommand.java	Mon Feb 02 20:18:53 2015 +0900
@@ -5,6 +5,7 @@
 import java.net.SocketException;
 import java.net.UnknownHostException;
 
+import com.glavsoft.rfb.protocol.ProtocolContext;
 import com.glavsoft.rfb.protocol.ProtocolContext.TreeCommand;
 import com.glavsoft.transport.Reader;
 import com.glavsoft.transport.Writer;
@@ -41,7 +42,10 @@
         this.connection = connection;
     }
 
-    public void handleTreeVncCommand()  {
+
+
+
+    public void handleTreeVncCommand() {
         switch (command) {
             case FIND_ROOT_REPLY :
                 handleFindRootReply(port,hostname,myHostName);
@@ -135,7 +139,7 @@
         rfb.getTreeManager(intf).fixLostParent(hostname,port,myHostName);
     }
 
-    private void handleLostChild(int port, String hostname, String myHostName, int clientId) {
+    public void handleLostChild(int port, String hostname, String myHostName, int clientId) {
         rfb.getTreeManager(intf).fixLostChild(hostname, port, myHostName, clientId);
     }
 
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/TreeVncCommandChannelListener.java	Mon Feb 02 13:50:35 2015 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/TreeVncCommandChannelListener.java	Mon Feb 02 20:18:53 2015 +0900
@@ -62,7 +62,7 @@
                 final InputStream is = newCli.getInputStream();
                 new Thread(new Runnable() {
                     public void run() {
-                        TreeVncCommand cmd = newClientHandler(newCli,new Writer(os), new Reader(is));
+                        TreeVncCommand cmd = newClientHandler(newCli, new Writer(os), new Reader(is));
                         if (cmd!=null) cmdQueue.add(cmd);
                     }
                 },"accepting").start();
@@ -114,7 +114,7 @@
         sendSecResult(os);
         readClientInit(is);
         sendInitData(os);
-        return new TreeVncCommand(rfb, myHostAddress, TreeCommand.NEW_NODE, os,is,connection);
+        return new TreeVncCommand(rfb, myHostAddress, TreeCommand.NEW_NODE, os, is, connection);
     }
 
     /**
--- a/src/main/java/jp/ac/u_ryukyu/treevnc/TreeVncProtocol.java	Mon Feb 02 13:50:35 2015 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/treevnc/TreeVncProtocol.java	Mon Feb 02 20:18:53 2015 +0900
@@ -43,7 +43,7 @@
 
     public void connectTo(String hostname, int port,int leaderFlag, short yourId) throws IOException{
         TreeCommand command = leaderFlag == 1 ? TreeCommand.CONNECT_TO_AS_LEADER : TreeCommand.CONNECT_TO;
-        sendWithHostAndPort(command , hostname, port, yourId);
+        sendWithHostAndPort(command, hostname, port, yourId);
     }
 
     public void lostParent(String hostname, int port) throws IOException {