Mercurial > hg > Members > riono > TreeVNC_ja_comment
view src/main/java/jp/ac/u_ryukyu/treevnc/TreeVncProtocol.java @ 335:49e25659ad05
remove socketClose, close unused viewer -d mode.
author | oc |
---|---|
date | Fri, 06 Feb 2015 11:08:33 +0900 |
parents | dff2f92ae3ff |
children | 931e1abda61d |
line wrap: on
line source
package jp.ac.u_ryukyu.treevnc; import java.io.*; import java.net.*; import java.nio.ByteBuffer; import java.nio.ByteOrder; import com.glavsoft.rfb.protocol.ProtocolContext.TreeCommand; public class TreeVncProtocol { private BufferedReader is = null; private DataOutputStream os = null; private Socket echoSocket = null; private int rootPort; private String rootAddress; private int singleWidth; private int singleHeight; public TreeVncProtocol(String name, int echoPort) { this.rootPort = echoPort; this.rootAddress = name; } public void setSingleSize(int singleWidth, int singleHeight) { this.singleWidth = singleWidth; this.singleHeight = singleHeight; } public void openport() throws IOException { echoSocket = new Socket(rootAddress, rootPort); // echoSocket.setReuseAddress(true); os = new DataOutputStream(echoSocket.getOutputStream()); is = new BufferedReader(new InputStreamReader(echoSocket.getInputStream())); } public void findRootReply(int port) { try { sendWithHostAndPort(TreeCommand.FIND_ROOT_REPLY, null, port, (short) 0); } catch (IOException e) { e.printStackTrace(); System.out.println("cannot send findRootReplay"); } } public void whereToConnect(String hostname, int port) { try { sendWithHostAndPort(TreeCommand.WHERE_TO_CONNECT, hostname, port, (short) 0); } catch (IOException e) { e.printStackTrace(); System.out.println("cannot send whereToConnect"); } } public void connectTo(String hostname, int port,int leaderFlag, short yourId) { TreeCommand command = leaderFlag == 1 ? TreeCommand.CONNECT_TO_AS_LEADER : TreeCommand.CONNECT_TO; try { sendWithHostAndPort(command, hostname, port, yourId); } catch (IOException e) { e.printStackTrace(); System.out.println("cannot send connectTo"); } } public void lostParent(String hostname, int port) { try { sendWithHostAndPort(TreeCommand.LOST_PARENT, hostname, port, (short) 0); } catch (IOException e) { e.printStackTrace(); System.out.println("cannot send lostParent"); } } public void lostChild(String myHostName, int myHostPort, int myId) { try { sendWithHostAndPort(TreeCommand.LOST_CHILD, myHostName, myHostPort, (short) myId); } catch (IOException e) { e.printStackTrace(); System.out.println("cannot send lostChild"); } } public void sendWithHostAndPort(TreeCommand command, String hostname, int port, short value) throws IOException { openport(); if (hostname == null) { // in case of root finder, we can't get localaddress from datagram packet. // so use local part of TCP socket. hostname = echoSocket.getLocalAddress().getHostAddress(); } int cmdlen = 4 + 4 + 4 + hostname.length(); if (cmdlen < 12) cmdlen = 12; ByteBuffer buf = ByteBuffer.allocate(cmdlen); buf.order(ByteOrder.BIG_ENDIAN); buf.put((byte) command.cmd); buf.put((byte) 0); buf.putShort(value); buf.putInt(4 + hostname.length()); // length buf.putInt(port); buf.put(hostname.getBytes(), 0, hostname.length()); while (buf.hasRemaining()) buf.put((byte) 0); buf.flip(); sendCommandToTheRoot(buf); } public void sendCommandToTheRoot(ByteBuffer buf) throws IOException { char[] charBuf = new char[12]; is.read(charBuf, 0, 12); // skip root's version header os.write(buf.array(), 0, buf.limit()); // send our command } void streamClose() throws IOException { os.close(); is.close(); echoSocket.close(); } }