# HG changeset patch # User oc # Date 1422875933 -32400 # Node ID 230038d5127d50e4f1b301c4032a05956261f83c # Parent 1a2ab6bd5ba3405f4eea62b5dcf17454aa85dce1 change reconnect new node instead of lost child node. diff -r 1a2ab6bd5ba3 -r 230038d5127d src/main/java/jp/ac/u_ryukyu/treevnc/CreateConnectionParam.java --- 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() { diff -r 1a2ab6bd5ba3 -r 230038d5127d src/main/java/jp/ac/u_ryukyu/treevnc/TreeManagement.java --- 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()); diff -r 1a2ab6bd5ba3 -r 230038d5127d src/main/java/jp/ac/u_ryukyu/treevnc/TreeRFBProto.java --- 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 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()); } } diff -r 1a2ab6bd5ba3 -r 230038d5127d src/main/java/jp/ac/u_ryukyu/treevnc/TreeVncCommand.java --- 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); } diff -r 1a2ab6bd5ba3 -r 230038d5127d src/main/java/jp/ac/u_ryukyu/treevnc/TreeVncCommandChannelListener.java --- 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); } /** diff -r 1a2ab6bd5ba3 -r 230038d5127d src/main/java/jp/ac/u_ryukyu/treevnc/TreeVncProtocol.java --- 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 {