Mercurial > hg > Members > riono > TreeVNC_ja_comment
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 |