annotate src/main/java/jp/ac/u_ryukyu/treevnc/TreeVncProtocol.java @ 206:2b3eb4a9492f

MyRfbProto reorganization
author oc
date Wed, 02 Jul 2014 17:58:55 +0900
parents src/main/java/jp/ac/u_ryukyu/treevnc/client/TreeVncProtocol.java@2e1530139169
children dd154ffe1a53
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
206
2b3eb4a9492f MyRfbProto reorganization
oc
parents: 174
diff changeset
1 package jp.ac.u_ryukyu.treevnc;
1
75b54fd9e73a add new package treevnc
Yu Taninari <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
75b54fd9e73a add new package treevnc
Yu Taninari <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 import java.io.*;
75b54fd9e73a add new package treevnc
Yu Taninari <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 import java.net.*;
125
32c6563492f3 add vnc protocol command sender.
oc
parents: 92
diff changeset
5 import java.nio.ByteBuffer;
32c6563492f3 add vnc protocol command sender.
oc
parents: 92
diff changeset
6 import java.nio.ByteOrder;
159
1c9f6acdfeb2 TreeCommand enum
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 158
diff changeset
7 import com.glavsoft.rfb.protocol.ProtocolContext.TreeCommand;
1
75b54fd9e73a add new package treevnc
Yu Taninari <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8
125
32c6563492f3 add vnc protocol command sender.
oc
parents: 92
diff changeset
9 public class TreeVncProtocol {
1
75b54fd9e73a add new package treevnc
Yu Taninari <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 private BufferedReader is = null;
75b54fd9e73a add new package treevnc
Yu Taninari <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 private DataOutputStream os = null;
75b54fd9e73a add new package treevnc
Yu Taninari <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 private Socket echoSocket = null;
174
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 172
diff changeset
13 private int rootPort;
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 172
diff changeset
14 private String rootAddress;
125
32c6563492f3 add vnc protocol command sender.
oc
parents: 92
diff changeset
15
32c6563492f3 add vnc protocol command sender.
oc
parents: 92
diff changeset
16 public TreeVncProtocol(String name, int echoPort) {
174
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 172
diff changeset
17 this.rootPort = echoPort;
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 172
diff changeset
18 this.rootAddress = name;
3
e7ce2b2ffed8 add and modify files
Yu Taninari <you@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
19 }
1
75b54fd9e73a add new package treevnc
Yu Taninari <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20
32
758d025ee24b add TextBox.java
one
parents: 12
diff changeset
21 public void openport() {
1
75b54fd9e73a add new package treevnc
Yu Taninari <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 try {
174
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 172
diff changeset
23 echoSocket = new Socket(rootAddress, rootPort);
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 172
diff changeset
24 // echoSocket.setReuseAddress(true);
1
75b54fd9e73a add new package treevnc
Yu Taninari <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 os = new DataOutputStream(echoSocket.getOutputStream());
75b54fd9e73a add new package treevnc
Yu Taninari <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 is = new BufferedReader(new InputStreamReader(
75b54fd9e73a add new package treevnc
Yu Taninari <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 echoSocket.getInputStream()));
75b54fd9e73a add new package treevnc
Yu Taninari <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 } catch (UnknownHostException e) {
174
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 172
diff changeset
29 System.err.println("Don't know about host: "+rootAddress);
1
75b54fd9e73a add new package treevnc
Yu Taninari <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 } catch (IOException e) {
174
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 172
diff changeset
31 System.out.println(rootAddress + " Connection Faild");
1
75b54fd9e73a add new package treevnc
Yu Taninari <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 System.exit(0);
75b54fd9e73a add new package treevnc
Yu Taninari <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 }
75b54fd9e73a add new package treevnc
Yu Taninari <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 }
75b54fd9e73a add new package treevnc
Yu Taninari <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35
155
1c95bd5bebcf root finder for multiple network.
oc
parents: 153
diff changeset
36 public void findRootReply(int port) throws IOException {
169
8ab1f6905db4 Try to hide root frame
oc
parents: 159
diff changeset
37 sendWithHostAndPort(TreeCommand.FIND_ROOT_REPLY, null, port, (short) 0);
125
32c6563492f3 add vnc protocol command sender.
oc
parents: 92
diff changeset
38 }
32c6563492f3 add vnc protocol command sender.
oc
parents: 92
diff changeset
39
32c6563492f3 add vnc protocol command sender.
oc
parents: 92
diff changeset
40 public void whereToConnect(String hostname, int port) throws IOException {
169
8ab1f6905db4 Try to hide root frame
oc
parents: 159
diff changeset
41 sendWithHostAndPort(TreeCommand.WHERE_TO_CONNECT, hostname, port, (short) 0);
125
32c6563492f3 add vnc protocol command sender.
oc
parents: 92
diff changeset
42 }
133
70cbec526039 connection handling
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 131
diff changeset
43
169
8ab1f6905db4 Try to hide root frame
oc
parents: 159
diff changeset
44 public void connectTo(String hostname, int port,int leaderFlag, short yourId) throws IOException{
159
1c9f6acdfeb2 TreeCommand enum
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 158
diff changeset
45 TreeCommand command = leaderFlag == 1 ? TreeCommand.CONNECT_TO_AS_LEADER : TreeCommand.CONNECT_TO;
169
8ab1f6905db4 Try to hide root frame
oc
parents: 159
diff changeset
46 sendWithHostAndPort(command , hostname, port, yourId);
145
649794dfb9d5 add my hostname to handle multiple network
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 143
diff changeset
47 }
133
70cbec526039 connection handling
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 131
diff changeset
48
125
32c6563492f3 add vnc protocol command sender.
oc
parents: 92
diff changeset
49 public void lostParent(String hostname, int port) throws IOException {
169
8ab1f6905db4 Try to hide root frame
oc
parents: 159
diff changeset
50 sendWithHostAndPort(TreeCommand.LOST_PARENT, hostname, port, (short) 0);
125
32c6563492f3 add vnc protocol command sender.
oc
parents: 92
diff changeset
51 }
135
ada4d850a820 lostParent and notFoundParenet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
52
169
8ab1f6905db4 Try to hide root frame
oc
parents: 159
diff changeset
53 public void sendWithHostAndPort(TreeCommand command, String hostname, int port, short value)
125
32c6563492f3 add vnc protocol command sender.
oc
parents: 92
diff changeset
54 throws IOException {
32c6563492f3 add vnc protocol command sender.
oc
parents: 92
diff changeset
55 openport();
155
1c95bd5bebcf root finder for multiple network.
oc
parents: 153
diff changeset
56 if (hostname == null) {
1c95bd5bebcf root finder for multiple network.
oc
parents: 153
diff changeset
57 // in case of root finder, we can't get localaddress from datagram packet.
1c95bd5bebcf root finder for multiple network.
oc
parents: 153
diff changeset
58 // so use local part of TCP socket.
1c95bd5bebcf root finder for multiple network.
oc
parents: 153
diff changeset
59 hostname = echoSocket.getLocalAddress().getHostAddress();
1c95bd5bebcf root finder for multiple network.
oc
parents: 153
diff changeset
60 }
147
703db66138b5 WhereToConnect
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 145
diff changeset
61 int cmdlen = 4+4+4+hostname.length();
703db66138b5 WhereToConnect
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 145
diff changeset
62 if (cmdlen < 12) cmdlen=12;
703db66138b5 WhereToConnect
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 145
diff changeset
63 ByteBuffer buf = ByteBuffer.allocate(cmdlen);
125
32c6563492f3 add vnc protocol command sender.
oc
parents: 92
diff changeset
64 buf.order(ByteOrder.BIG_ENDIAN);
159
1c9f6acdfeb2 TreeCommand enum
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 158
diff changeset
65 buf.put((byte) command.cmd);
125
32c6563492f3 add vnc protocol command sender.
oc
parents: 92
diff changeset
66
32c6563492f3 add vnc protocol command sender.
oc
parents: 92
diff changeset
67 buf.put((byte) 0);
169
8ab1f6905db4 Try to hide root frame
oc
parents: 159
diff changeset
68 buf.putShort(value);
125
32c6563492f3 add vnc protocol command sender.
oc
parents: 92
diff changeset
69 buf.putInt(4+hostname.length()); // length
32c6563492f3 add vnc protocol command sender.
oc
parents: 92
diff changeset
70 buf.putInt(port);
32c6563492f3 add vnc protocol command sender.
oc
parents: 92
diff changeset
71 buf.put(hostname.getBytes(), 0, hostname.length());
147
703db66138b5 WhereToConnect
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 145
diff changeset
72 while (buf.hasRemaining() ) buf.put((byte)0) ;
703db66138b5 WhereToConnect
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 145
diff changeset
73 buf.flip();
133
70cbec526039 connection handling
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 131
diff changeset
74 sendCommandToTheRoot(buf);
125
32c6563492f3 add vnc protocol command sender.
oc
parents: 92
diff changeset
75 }
135
ada4d850a820 lostParent and notFoundParenet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
76
ada4d850a820 lostParent and notFoundParenet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
77 public void sendCommandToTheRoot(ByteBuffer buf) throws IOException {
ada4d850a820 lostParent and notFoundParenet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
78 char[] charBuf = new char[12];
ada4d850a820 lostParent and notFoundParenet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
79 is.read(charBuf , 0, 12); // skip root's version header
ada4d850a820 lostParent and notFoundParenet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
80 os.write(buf.array(), 0, buf.limit()); // send our command
ada4d850a820 lostParent and notFoundParenet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
81 streamClose();
ada4d850a820 lostParent and notFoundParenet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
82 }
ada4d850a820 lostParent and notFoundParenet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
83
1
75b54fd9e73a add new package treevnc
Yu Taninari <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 void streamClose() throws IOException {
75b54fd9e73a add new package treevnc
Yu Taninari <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 os.close();
75b54fd9e73a add new package treevnc
Yu Taninari <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 is.close();
75b54fd9e73a add new package treevnc
Yu Taninari <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 echoSocket.close();
75b54fd9e73a add new package treevnc
Yu Taninari <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 }
75b54fd9e73a add new package treevnc
Yu Taninari <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
89
75b54fd9e73a add new package treevnc
Yu Taninari <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 }