comparison src/main/java/jp/ac/u_ryukyu/treevnc/client/MyRfbProtoClient.java @ 33:9d3478d11d3b

Add the processing of client
author Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
date Tue, 04 Sep 2012 06:06:17 +0900
parents 758d025ee24b
children b7d4d0349f99
comparison
equal deleted inserted replaced
32:758d025ee24b 33:9d3478d11d3b
7 import java.net.BindException; 7 import java.net.BindException;
8 import java.net.ServerSocket; 8 import java.net.ServerSocket;
9 import java.net.Socket; 9 import java.net.Socket;
10 import java.nio.ByteBuffer; 10 import java.nio.ByteBuffer;
11 import java.util.LinkedList; 11 import java.util.LinkedList;
12 import java.util.concurrent.atomic.AtomicInteger;
13 import java.util.zip.DataFormatException; 12 import java.util.zip.DataFormatException;
14 import java.util.zip.Deflater; 13 import java.util.zip.Deflater;
15 import java.util.zip.Inflater; 14 import java.util.zip.Inflater;
16 15
17 import jp.ac.u_ryukyu.treevnc.MulticastQueue;
18 import jp.ac.u_ryukyu.treevnc.MyRfbProto; 16 import jp.ac.u_ryukyu.treevnc.MyRfbProto;
19 17
20 import com.glavsoft.exceptions.TransportException; 18 import com.glavsoft.exceptions.TransportException;
21 import com.glavsoft.rfb.encoding.EncodingType; 19 import com.glavsoft.rfb.encoding.EncodingType;
22 import com.glavsoft.rfb.protocol.ProtocolContext; 20 import com.glavsoft.rfb.protocol.ProtocolContext;
23 import com.glavsoft.transport.Reader; 21 import com.glavsoft.transport.Reader;
24 import com.glavsoft.viewer.ContainerManager;
25 import com.glavsoft.viewer.swing.ParametersHandler.ConnectionParams; 22 import com.glavsoft.viewer.swing.ParametersHandler.ConnectionParams;
26 23
27 public class MyRfbProtoClient extends MyRfbProto { 24 public class MyRfbProtoClient extends MyRfbProto {
28 final static int FramebufferUpdate = 0; 25 final static int FramebufferUpdate = 0;
29 final static int CheckDelay = 11; 26 final static int CheckDelay = 11;
36 Socket clientSocket, sock; 33 Socket clientSocket, sock;
37 DataInputStream is; 34 DataInputStream is;
38 OutputStream os; 35 OutputStream os;
39 private ServerSocket servSock; 36 private ServerSocket servSock;
40 private ProtocolContext context; 37 private ProtocolContext context;
41 private MulticastQueue<LinkedList<ByteBuffer>> multicastqueue = new MulticastQueue<LinkedList<ByteBuffer>>();
42 boolean proxyFlag = false; 38 boolean proxyFlag = false;
43 int serverMajor, serverMinor; 39 int serverMajor, serverMinor;
44 int clientMajor, clientMinor; 40 int clientMajor, clientMinor;
45 41
46 private Inflater inflater = new Inflater(); 42 private Inflater inflater = new Inflater();
47 private Deflater deflater = new Deflater(); 43 private Deflater deflater = new Deflater();
48 44
49 public MyRfbProtoClient() { 45 public MyRfbProtoClient() {
50 46
51 } 47 }
52 48
53 public MyRfbProtoClient(Reader reader, String host, String port) { 49 public MyRfbProtoClient(Reader reader, String host, String port) {
54 this.reader = reader; 50 this.reader = reader;
55 } 51 }
72 reader.readBytes(b, 0, b.length); 68 reader.readBytes(b, 0, b.length);
73 // readFully(b); 69 // readFully(b);
74 return b; 70 return b;
75 } 71 }
76 72
77 public void getParentName() {
78 if (echoValue == null) {
79
80 if (clientSocket == null) {
81
82 // echo = new EchoClient(pHost, this);
83 echoValue = new EchoClient(pHost, echoPort);
84 echoValue.openport();
85
86 echoValue = echoValue.requestHostName("1");
87 } else {
88 echoValue = new EchoClient();
89 echoValue = echoValue.Interruption(clientSocket);
90 }
91 }
92 // proxyからの返信で接続先を決定する
93 host = echoValue.responseLine;
94 parent = echoValue.parent;
95 if (echoValue.treenum != null) {
96 treenum = echoValue.treenum;
97 } else {
98 treenum = echoValue.treenum;
99 }
100
101 if (echoValue.leaderflag != null) {
102 leaderflag = echoValue.leaderflag;
103 } else {
104 leaderflag = echoValue.leaderflag;
105 }
106 }
107 73
108 int castByteInt(byte[] b) { 74 int castByteInt(byte[] b) {
109 ByteBuffer bb = ByteBuffer.wrap(b); 75 ByteBuffer bb = ByteBuffer.wrap(b);
110 int value = bb.getInt(); 76 int value = bb.getInt();
111 return value; 77 return value;
140 106
141 } 107 }
142 } 108 }
143 System.out.println("accept port = " + port); 109 System.out.println("accept port = " + port);
144 } 110 }
145
146 111
147 void sendRfbVersion(OutputStream os) throws IOException { 112 void sendRfbVersion(OutputStream os) throws IOException {
148 os.write(versionMsg_3_855.getBytes()); 113 os.write(versionMsg_3_855.getBytes());
149 // os.write(versionMsg_3_8.getBytes()); 114 // os.write(versionMsg_3_8.getBytes());
150 } 115 }
345 310
346 public void readSendData(int dataLen, Reader reader) 311 public void readSendData(int dataLen, Reader reader)
347 throws TransportException { 312 throws TransportException {
348 LinkedList<ByteBuffer> bufs = new LinkedList<ByteBuffer>(); 313 LinkedList<ByteBuffer> bufs = new LinkedList<ByteBuffer>();
349 ByteBuffer header = ByteBuffer.allocate(16); 314 ByteBuffer header = ByteBuffer.allocate(16);
315 reader.mark(dataLen);
350 reader.readBytes(header.array(), 0, 16); 316 reader.readBytes(header.array(), 0, 16);
351 header.limit(16); 317 header.limit(16);
352 if (header.get(0) == FramebufferUpdate) { 318 if (header.get(0) == FramebufferUpdate) {
353 int encoding = header.getInt(12); 319 int encoding = header.getInt(12);
354 if (encoding == EncodingType.ZRLE.getId() 320 if (encoding == EncodingType.ZRLE.getId()
380 blen.flip(); 346 blen.flip();
381 bufs.addFirst(blen); 347 bufs.addFirst(blen);
382 348
383 bufs.addFirst(header); 349 bufs.addFirst(header);
384 multicastqueue.put(bufs); 350 multicastqueue.put(bufs);
385 is.reset(); 351 reader.reset();
386 } catch (DataFormatException e) { 352 } catch (DataFormatException e) {
387 throw new TransportException(e); 353 throw new TransportException(e);
388 } catch (IOException e) { 354 } catch (IOException e) {
389 throw new TransportException(e); 355 throw new TransportException(e);
390 } 356 }
397 reader.readBytes(b.array(), 0, dataLen - 16); 363 reader.readBytes(b.array(), 0, dataLen - 16);
398 b.limit(dataLen - 16); 364 b.limit(dataLen - 16);
399 bufs.add(b); 365 bufs.add(b);
400 } 366 }
401 multicastqueue.put(bufs); 367 multicastqueue.put(bufs);
402 try { 368 reader.reset();
403 is.reset();
404 } catch (IOException e) {
405 throw new TransportException(e);
406 }
407
408 // It may be compressed. We can inflate here to avoid repeating clients 369 // It may be compressed. We can inflate here to avoid repeating clients
409 // decompressing here, 370 // decompressing here,
410 // but it may generate too many large data. It is better to do it in 371 // but it may generate too many large data. It is better to do it in
411 // each client. 372 // each client.
412 // But we have do inflation for all input data, so we have to do it 373 // But we have do inflation for all input data, so we have to do it