Mercurial > hg > Applications > TreeVNC
comparison src/main/java/com/glavsoft/rfb/encoding/decoder/ZRLEESender.java @ 239:d655db005535
create sendCheckDelay Socket.
author | oc |
---|---|
date | Sat, 11 Oct 2014 23:46:22 +0900 |
parents | 6ee4cdca104c |
children | 83d0256a8808 |
comparison
equal
deleted
inserted
replaced
238:e21ef8f60f7a | 239:d655db005535 |
---|---|
9 import com.glavsoft.rfb.encoding.EncodingType; | 9 import com.glavsoft.rfb.encoding.EncodingType; |
10 import com.glavsoft.transport.Reader; | 10 import com.glavsoft.transport.Reader; |
11 | 11 |
12 public class ZRLEESender extends Decoder { | 12 public class ZRLEESender extends Decoder { |
13 | 13 |
14 private TreeRFBProto rfb; | 14 private TreeRFBProto rfb; |
15 | 15 |
16 public ZRLEESender(TreeRFBProto rfb) { | 16 public ZRLEESender(TreeRFBProto rfb) { |
17 this.rfb = rfb; | 17 this.rfb = rfb; |
18 } | 18 } |
19 | 19 |
20 public ZRLEESender() { | 20 public ZRLEESender() { |
21 } | 21 } |
22 | 22 |
23 @Override | 23 @Override |
24 public void decode(Reader reader, Renderer renderer, | 24 public void decode(Reader reader, Renderer renderer, |
25 FramebufferUpdateRectangle rect) throws TransportException, UnsupportedEncodingException { | 25 FramebufferUpdateRectangle rect) throws TransportException, UnsupportedEncodingException { |
26 // TreeVNC handling | 26 // TreeVNC handling |
27 int dataLen = getZrleLength(rect, reader); | 27 int dataLen = getZrleLength(rect, reader); |
28 byte[] bytes = new byte[rect.width * rect.height * renderer.getBytesPerPixel()]; | 28 byte[] bytes = new byte[rect.width * rect.height * renderer.getBytesPerPixel()]; |
29 reader.reset(); | 29 reader.reset(); |
30 if (rfb.hasViewer()) { | 30 if (rfb.hasViewer()) { |
31 ZRLEDecoder decoder = new ZRLEDecoder(); | 31 ZRLEDecoder decoder = new ZRLEDecoder(); |
32 if (rfb.isTreeManager()) { | 32 if (rfb.isTreeManager()) { |
33 rfb.readSendData(dataLen, reader, bytes); | 33 rfb.readSendData(dataLen, reader, bytes); |
34 decoder.decode1(renderer, rect, bytes, 0); | 34 decoder.decode1(renderer, rect, bytes, 0); |
35 return; | 35 return; |
36 } else if (!rfb.getCuiVersion()) { | 36 } else if (!rfb.getCuiVersion()) { |
37 rfb.readSendData(dataLen, reader, null); | 37 rfb.readSendData(dataLen, reader, null); |
38 reader.reset(); | 38 reader.reset(); |
39 reader.skip(16); | 39 reader.skip(16); |
40 decoder.decode(reader, renderer, rect); | 40 decoder.decode(reader, renderer, rect); |
41 return; | 41 return; |
42 } | 42 } |
43 } | 43 } |
44 rfb.readSendData(dataLen, reader, bytes); | 44 rfb.readSendData(dataLen, reader, bytes); |
45 } | 45 } |
46 | 46 |
47 private int getZrleLength(FramebufferUpdateRectangle rect, Reader reader) | 47 private int getZrleLength(FramebufferUpdateRectangle rect, Reader reader) |
48 throws TransportException { | 48 throws TransportException { |
49 int zrleLength = 0; | 49 int zrleLength = 0; |
50 if (rect.getEncodingType() == EncodingType.ZRLE | 50 if (rect.getEncodingType() == EncodingType.ZRLE |
51 || rect.getEncodingType() == EncodingType.ZRLEE | 51 || rect.getEncodingType() == EncodingType.ZRLEE |
52 || rect.getEncodingType() == EncodingType.ZLIB) { | 52 || rect.getEncodingType() == EncodingType.ZLIB) { |
53 zrleLength = reader.readInt32(); | 53 zrleLength = reader.readInt32(); |
54 } | 54 } |
55 return zrleLength + 20; | 55 return zrleLength + 20; |
56 } | 56 } |
57 | 57 |
58 public void readCheckDelay(Reader reader) { | |
59 try { | |
60 reader.reset(); | |
61 rfb.readCheckDelay(reader); | |
62 } catch (TransportException e) { | |
63 e.printStackTrace(); | |
64 } | |
65 } | |
66 } | 58 } |