view src/main/java/ac/ryukyu/treevnc/client/MyVncClient.java @ 2:dca3bd61b830

before change MyVncClient.java
author Yu Taninari <you@cr.ie.u-ryukyu.ac.jp>
date Mon, 09 Jul 2012 18:47:33 +0900
parents 75b54fd9e73a
children e7ce2b2ffed8
line wrap: on
line source

package ac.ryukyu.treevnc.client;

import java.awt.Image;
import java.awt.Insets;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.IOException;
import java.net.Socket;
import java.util.logging.Logger;

import javax.swing.SwingUtilities;

import com.glavsoft.exceptions.AuthenticationFailedException;
import com.glavsoft.exceptions.FatalException;
import com.glavsoft.exceptions.TransportException;
import com.glavsoft.exceptions.UnsupportedProtocolVersionException;
import com.glavsoft.exceptions.UnsupportedSecurityTypeException;
import com.glavsoft.rfb.IChangeSettingsListener;
import com.glavsoft.rfb.IRfbSessionListener;
import com.glavsoft.rfb.protocol.Protocol;
import com.glavsoft.rfb.protocol.ProtocolSettings;
import com.glavsoft.transport.Reader;
import com.glavsoft.transport.Writer;
import com.glavsoft.viewer.ConnectionManager;
import com.glavsoft.viewer.Viewer;
import com.glavsoft.viewer.Viewer.PasswordChooser;
import com.glavsoft.viewer.cli.Parser;
import com.glavsoft.viewer.swing.ClipboardControllerImpl;
import com.glavsoft.viewer.swing.ParametersHandler;
import com.glavsoft.viewer.swing.Surface;
import com.glavsoft.viewer.swing.UiSettings;
import com.glavsoft.viewer.swing.ParametersHandler.ConnectionParams;

import ac.ryukyu.treevnc.InterfaceForViewer;

public class MyVncClient extends Viewer implements Runnable, 
 	IRfbSessionListener, WindowListener, IChangeSettingsListener {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private boolean inAnApplet = true;
	private boolean inSeparateFrame = false;
	private Socket clientSocket = null;
	private String parent, treenum;
	private String leaderflag;
	// private boolean runflag = false;
	private boolean first = true;

	private EchoClient echoValue;
	private int echoPort;
	private String pHost;
	private TextBoxClient getHost;
	private GetDataClient getBcast;
	private Thread runBcast;
	private GetHostClient bCast;
	boolean isClient = false;
	public static final int DEFAULT_PORT = 5900;
	public static Logger logger = Logger.getLogger("com.glavsoft");
	private static final Insets BUTTONS_MARGIN = new Insets(2, 2, 2, 2);
	private boolean isZoomToFitSelected;
	private boolean forceReconnection;
	private String reconnectionReason;
	private ConnectionParams connectionParams;
	private final ProtocolSettings settings;
	private final UiSettings uiSettings;
	
	
	public MyVncClient() {
		connectionParams = new ParametersHandler.ConnectionParams();
		settings = ProtocolSettings.getDefaultSettings();
		uiSettings = new UiSettings();
	}
	
	public MyVncClient(Parser parser) {
		this();
		ParametersHandler.completeSettingsFromCLI(parser, connectionParams, settings, uiSettings);
		showControls = ParametersHandler.showControls;
		passwordFromParams = parser.getValueFor(ParametersHandler.ARG_PASSWORD);
		logger.info("TightVNC Viewer version " + ver());
		isApplet = false;
	}

	public void treeVncClient(String[] argv) {
		MyVncClient v = new MyVncClient();
		//v.runClient(argv);
	}

	// private void runClient(String[] argv) {
	public static void main(String[] argv) {
		String[] mainArgs = argv;
		System.out.println(mainArgs.length);
		// input into arguments Decision
		if (mainArgs.length != 0) {
			for (int i = 0; i < argv.length; i++) {
				if ("-c".equals(argv[i])) {
					// write later
				}
			}
		} else {
			//getHostData();
		}
		Parser parser = new Parser();
		ParametersHandler.completeParserOptions(parser);

		parser.parse(argv);
		if (parser.isSet(ParametersHandler.ARG_HELP)) {
			printUsage(parser.optionsUsage());
			System.exit(0);
		}
		MyVncClient myClient = new MyVncClient(parser);
		//SwingUtilities.invokeLater(myClient);
		Thread th = new Thread(myClient);
		th.start();
	}
	
	private void getHostData() {
		bCast = new GetHostClient("who");
		bCast.createSocket();
		bCast.sendData();
		getBcast = new GetDataClient();
		runBcast = new Thread(getBcast);
		runBcast.start();
		getBcast.setStopFlag(true);
		connectionParams.hostName = getBcast.textAddress();
		if("notFound".equals(pHost)) {
			getHost = new TextBoxClient();
			getHost.ipRegister();
			connectionParams.hostName = getHost.getAddressOption();
			//connectionParams.portNumber = Integer.parseInt(getHost.getPortOption());
			connectionParams.portNumber = 5900;
		} else {
			//connectionParams.portNumber = Integer.parseInt(getBcast.textPort());
			connectionParams.portNumber = 5900;
		}
	}

	@Override
	public void run() {
	//	getHostData();
		ConnectionManager connectionManager = new ConnectionManager(this, isApplet);
		if (forceReconnection) {
			connectionManager.showReconnectDialog("Connection lost", reconnectionReason);
			forceReconnection = false;
		}
		tryAgain = true;
		while (tryAgain) {
		//	workingSocket = connectionManager.connectToTreeHost(connectionParams, settings);
			workingSocket = connectionManager.connectToHost(connectionParams, settings);
			if (null == workingSocket) {
				closeApp();
				break;
			}
			logger.info("Connected");

			try {
				workingSocket.setTcpNoDelay(true); // disable Nagle algorithm
				Reader reader = new Reader(workingSocket.getInputStream());
				Writer writer = new Writer(workingSocket.getOutputStream());

				workingProtocol = new Protocol(reader, writer,
						new PasswordChooser(passwordFromParams, connectionParams, containerFrame, this),
						settings);
				workingProtocol.handshake();

                ClipboardControllerImpl clipboardController =
		                new ClipboardControllerImpl(workingProtocol, settings.getRemoteCharsetName());
				clipboardController.setEnabled(settings.isAllowClipboardTransfer());
				settings.addListener(clipboardController);

				surface = new Surface(workingProtocol, this, uiSettings.getScaleFactor());
				settings.addListener(this);
				uiSettings.addListener(surface);
				containerFrame = createContainer();
				connectionManager.setContainerFrame(containerFrame);
				updateFrameTitle();

				workingProtocol.startNormalHandling(this, surface, clipboardController);
				tryAgain = false;
			} catch (UnsupportedProtocolVersionException e) {
				connectionManager.showReconnectDialog("Unsupported Protocol Version", e.getMessage());
				logger.severe(e.getMessage());
			} catch (UnsupportedSecurityTypeException e) {
				connectionManager.showReconnectDialog("Unsupported Security Type", e.getMessage());
				logger.severe(e.getMessage());
			} catch (AuthenticationFailedException e) {
				passwordFromParams = null;
				connectionManager.showReconnectDialog("Authentication Failed", e.getMessage());
				logger.severe(e.getMessage());
			} catch (TransportException e) {
				connectionManager.showReconnectDialog("Connection Error", "Connection Error" + ": " + e.getMessage());
				logger.severe(e.getMessage());
			} catch (IOException e) {
				connectionManager.showReconnectDialog("Connection Error", "Connection Error" + ": " + e.getMessage());
				logger.severe(e.getMessage());
			} catch (FatalException e) {
				connectionManager.showReconnectDialog("Connection Error", "Connection Error" + ": " + e.getMessage());
				logger.severe(e.getMessage());
			}
		}

	}





	@Override
	public void destroy() {
		// TODO Auto-generated method stub

	}

	@Override
	public void windowClosing(WindowEvent e) {
		if (e != null && e.getComponent() != null) {
			e.getWindow().setVisible(false);
		}
		closeApp();
	}

	@Override
	public void windowActivated(WindowEvent e) { /*nop*/ }

	@Override
	public void windowClosed(WindowEvent e) { /*nop*/ }

	@Override
	public void windowDeactivated(WindowEvent e) { /*nop*/ }

	@Override
	public void windowDeiconified(WindowEvent e) { /*nop*/ }

	@Override
	public void windowIconified(WindowEvent e) { /*nop*/ }

	@Override
	public void windowOpened(WindowEvent e) { /*nop*/ }

}