view src/main/java/jp/ac/u_ryukyu/treevnc/CreateConnectionParam.java @ 157:7cea8789387b

thread base command listening loop
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Fri, 13 Jun 2014 23:12:28 +0900
parents e68dfd1972ac
children fa6cfb85444e
line wrap: on
line source

package jp.ac.u_ryukyu.treevnc;

import java.io.IOException;

import com.glavsoft.viewer.ViewerInterface;
import com.glavsoft.viewer.swing.ConnectionParams;

import jp.ac.u_ryukyu.treevnc.client.FindRoot;
import jp.ac.u_ryukyu.treevnc.client.TreeVncProtocol;

public class CreateConnectionParam {
	private String hostName;
	private int portNumber = ConnectionParams.DEFAULT_VNC_ROOT;
	private MyRfbProto rfb;
    private String myHostName;
    public TreeVncCommandChannelListener acceptThread;
	
	public CreateConnectionParam(MyRfbProto rfb) {
		this.rfb = rfb;
	}

	public synchronized void findTreeVncRoot() throws InterruptedException {
		rfb.createRootSelectionPanel(this);
		FindRoot getBcast = new FindRoot(rfb.acceptPort,this);
		getBcast.findRoot();
		// wait for RootSelection
		wait();
	}

	/**
	 * To find parent, send WHERE_TO_CONNECT command to the TreeVNC root
	 * Incoming CONNECT_TO message is handled in MyRFBProto
	 * @param v
	 */
	public void createConnectionParam(ViewerInterface v) {
		TreeVncProtocol echo = new TreeVncProtocol(hostName,portNumber);
		rfb.setEcho(echo);
		try {
            echo.whereToConnect(myHostName,rfb.getAcceptPort());
        } catch (IOException e) {
            // cannot send where to connect
        }
	}
	
	public void runTreeVncCommandListener() {
		rfb.selectPort(ConnectionParams.DEFAULT_VNC_ROOT);
		acceptThread = new TreeVncCommandChannelListener(rfb, rfb.getAcceptPort());
		Thread accThread = new Thread(acceptThread, "tree-vnc-command-listener");
		accThread.start();
	}

	public synchronized void setHostName(String _hostName, int port, String _myHostName) {
	    hostName = _hostName;
	    portNumber = port;
	    myHostName = _myHostName;
	    notify();
	}

	public void setHostName(String hostAndPort) {
	    int i = hostAndPort.indexOf(':'); 
	    if (i>0) {
	        portNumber = Integer.parseInt(hostAndPort.substring(i+1));
	        hostName = hostAndPort.substring(0,i);
	    } else  
	        hostName = hostAndPort;
	}

	public String getMyHostName() {
	    return myHostName;
	}

    public  TreeVncCommandChannelListener getAcceptThread() {
        return acceptThread;
    }
}