view src/main/java/jp/ac/u_ryukyu/treevnc/client/MyRfbProtoClient.java @ 119:f35479f25f4a

fixes
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 26 May 2014 19:01:13 +0900
parents 38e461e9b9c9
children 128cce60c43c
line wrap: on
line source

package jp.ac.u_ryukyu.treevnc.client;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
import java.util.LinkedList;

import jp.ac.u_ryukyu.treevnc.MyRfbProto;

import com.glavsoft.exceptions.TransportException;
import com.glavsoft.rfb.protocol.ProtocolContext;
import com.glavsoft.transport.Reader;

public class MyRfbProtoClient extends MyRfbProto {
	private Reader reader;
	private ProtocolContext context;
	boolean proxyFlag = false;
	int serverMajor, serverMinor;
	int clientMajor, clientMinor;
	private boolean normalTermination;


	public MyRfbProtoClient() {

	}

	public MyRfbProtoClient(Reader reader, String host, String port) {
		this.reader = reader;
	}

    @Override
    public boolean isRoot() {
        return false;
    }
    
	public boolean readProxyFlag() throws TransportException {
		int flag = reader.readUInt8();
		if (flag == 1)
			return true;
		else
			return false;
	}

	public byte[] readEchoPort() throws Exception {
		byte[] b = new byte[4];
		reader.readBytes(b, 0, b.length);
		return b;
	}


	@Override
	public Socket accept() throws IOException {
		servSock.setReuseAddress(true);
		return servSock.accept();
	}

	void sendInitData(OutputStream os) throws IOException {
		os.write(context.getInitData());
	}

	
	@Override
	public void setTerminationType(boolean setType) {
		normalTermination = setType;
	}
	
	@Override
	public boolean getTerminationType() {
		return normalTermination;
	}
	
	@Override
	public void close() {
		try {
			servSock.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	@Override
	public void readCheckDelay(Reader reader) throws TransportException {
		ByteBuffer buf = multicastqueue.allocate(24);
		reader.readBytes(buf.array(), 0, 24);
		
		LinkedList<ByteBuffer> sendData = new LinkedList<ByteBuffer>();
		sendData.add(buf);
		Socket echoSocket;
		try {
			echoSocket = new Socket(getProxyAddr(), 10002);
			BufferedReader is = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
			DataOutputStream os = new DataOutputStream(echoSocket.getOutputStream());
			os.writeBytes("checkdelay\n");
			os.writeBytes(String.valueOf(buf.getLong(16))+"\n");
			System.out.println("delay"+ is.readLine());
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		buf.position(0);
		
		multicastqueue.put(sendData);
		
	}
}