annotate src/main/java/com/glavsoft/rfb/protocol/TreeTask.java @ 24:1fe39e8ba3e9

remove RICH_CURSOR and CURSOR_POS
author one
date Thu, 30 Aug 2012 15:13:34 +0900
parents 6a4312344a5a
children 73b13bc335c2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16
e654b2e4de64 add TreeTask.java
one
parents:
diff changeset
1 package com.glavsoft.rfb.protocol;
e654b2e4de64 add TreeTask.java
one
parents:
diff changeset
2
e654b2e4de64 add TreeTask.java
one
parents:
diff changeset
3 import jp.ac.u_ryukyu.treevnc.server.*;
e654b2e4de64 add TreeTask.java
one
parents:
diff changeset
4
e654b2e4de64 add TreeTask.java
one
parents:
diff changeset
5 import com.glavsoft.exceptions.CommonException;
e654b2e4de64 add TreeTask.java
one
parents:
diff changeset
6 import com.glavsoft.exceptions.TransportException;
e654b2e4de64 add TreeTask.java
one
parents:
diff changeset
7 import com.glavsoft.rfb.ClipboardController;
e654b2e4de64 add TreeTask.java
one
parents:
diff changeset
8 import com.glavsoft.rfb.IRepaintController;
23
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
9 import com.glavsoft.rfb.client.FramebufferUpdateRequestMessage;
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
10 import com.glavsoft.rfb.client.SetPixelFormatMessage;
16
e654b2e4de64 add TreeTask.java
one
parents:
diff changeset
11 import com.glavsoft.rfb.encoding.EncodingType;
23
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
12 import com.glavsoft.rfb.encoding.decoder.Decoder;
16
e654b2e4de64 add TreeTask.java
one
parents:
diff changeset
13 import com.glavsoft.rfb.encoding.decoder.DecodersContainer;
e654b2e4de64 add TreeTask.java
one
parents:
diff changeset
14 import com.glavsoft.rfb.encoding.decoder.FramebufferUpdateRectangle;
23
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
15 import com.glavsoft.rfb.encoding.decoder.RichCursorDecoder;
16
e654b2e4de64 add TreeTask.java
one
parents:
diff changeset
16 import com.glavsoft.transport.Reader;
e654b2e4de64 add TreeTask.java
one
parents:
diff changeset
17
e654b2e4de64 add TreeTask.java
one
parents:
diff changeset
18 public class TreeTask extends ReceiverTask {
e654b2e4de64 add TreeTask.java
one
parents:
diff changeset
19 final static String versionMsg_3_855 = "RFB 003.855\n";
19
ea83f4be0cc9 remove is and os
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
20 private MyRfbProtoProxy rfb;
ea83f4be0cc9 remove is and os
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
21
16
e654b2e4de64 add TreeTask.java
one
parents:
diff changeset
22 public TreeTask(Reader reader, IRepaintController repaintController,
e654b2e4de64 add TreeTask.java
one
parents:
diff changeset
23 ClipboardController clipboardController,
23
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
24 DecodersContainer decoders, ProtocolContext context, MyRfbProtoProxy _rfb) {
19
ea83f4be0cc9 remove is and os
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
25 super(reader, repaintController, clipboardController, decoders,
ea83f4be0cc9 remove is and os
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
26 context, true);
23
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
27 rfb = _rfb;
16
e654b2e4de64 add TreeTask.java
one
parents:
diff changeset
28 }
19
ea83f4be0cc9 remove is and os
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
29
24
1fe39e8ba3e9 remove RICH_CURSOR and CURSOR_POS
one
parents: 23
diff changeset
30 /*
1fe39e8ba3e9 remove RICH_CURSOR and CURSOR_POS
one
parents: 23
diff changeset
31 * (non-Javadoc)
1fe39e8ba3e9 remove RICH_CURSOR and CURSOR_POS
one
parents: 23
diff changeset
32 * proxy
1fe39e8ba3e9 remove RICH_CURSOR and CURSOR_POS
one
parents: 23
diff changeset
33 * no Repaint
1fe39e8ba3e9 remove RICH_CURSOR and CURSOR_POS
one
parents: 23
diff changeset
34 * decoder!=0 ZRLE -> ZRLEE
1fe39e8ba3e9 remove RICH_CURSOR and CURSOR_POS
one
parents: 23
diff changeset
35 * readSendData();
1fe39e8ba3e9 remove RICH_CURSOR and CURSOR_POS
one
parents: 23
diff changeset
36 * client
1fe39e8ba3e9 remove RICH_CURSOR and CURSOR_POS
one
parents: 23
diff changeset
37 * Repaint
1fe39e8ba3e9 remove RICH_CURSOR and CURSOR_POS
one
parents: 23
diff changeset
38 * no context.send();
1fe39e8ba3e9 remove RICH_CURSOR and CURSOR_POS
one
parents: 23
diff changeset
39 * if necessary ZRLEE -> ZRLE
1fe39e8ba3e9 remove RICH_CURSOR and CURSOR_POS
one
parents: 23
diff changeset
40 * readSendData();
1fe39e8ba3e9 remove RICH_CURSOR and CURSOR_POS
one
parents: 23
diff changeset
41 */
16
e654b2e4de64 add TreeTask.java
one
parents:
diff changeset
42 @Override
19
ea83f4be0cc9 remove is and os
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
43 public void framebufferUpdateMessage() throws CommonException {
16
e654b2e4de64 add TreeTask.java
one
parents:
diff changeset
44 reader.readByte(); // padding
19
ea83f4be0cc9 remove is and os
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
45 int numberOfRectangles = reader.readUInt16(); // number of rectangles
23
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
46
16
e654b2e4de64 add TreeTask.java
one
parents:
diff changeset
47 while (numberOfRectangles-- > 0) {
e654b2e4de64 add TreeTask.java
one
parents:
diff changeset
48 FramebufferUpdateRectangle rect = new FramebufferUpdateRectangle();
e654b2e4de64 add TreeTask.java
one
parents:
diff changeset
49 rect.fill(reader);
23
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
50
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
51 Decoder decoder = decoders.getDecoderByType(rect.getEncodingType());
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
52 logger.finest(rect.toString() + (0 == numberOfRectangles ? "\n---" : ""));
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
53 if (decoder != null) {
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
54 int zrleLength = getZrleLength(rect);
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
55 reader.reset();
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
56 rfb.readSendData(zrleLength, reader);
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
57 } else if (rect.getEncodingType() == EncodingType.RICH_CURSOR) {
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
58 } else if (rect.getEncodingType() == EncodingType.CURSOR_POS) {
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
59 } else if (rect.getEncodingType() == EncodingType.DESKTOP_SIZE) {
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
60 fullscreenFbUpdateIncrementalRequest =
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
61 new FramebufferUpdateRequestMessage(0, 0, rect.width, rect.height, true);
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
62 context.sendMessage(new FramebufferUpdateRequestMessage(0, 0, rect.width, rect.height, false));
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
63 } else
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
64 throw new CommonException("Unprocessed encoding: " + rect.toString());
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
65 }
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
66 synchronized (this) {
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
67 if (needSendPixelFormat) {
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
68 needSendPixelFormat = false;
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
69 context.setPixelFormat(pixelFormat);
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
70 context.sendMessage(new SetPixelFormatMessage(pixelFormat));
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
71 logger.fine("sent: "+pixelFormat);
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
72 context.sendRefreshMessage();
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
73 logger.fine("sent: nonincremental fb update");
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
74 } else {
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
75 context.sendMessage(fullscreenFbUpdateIncrementalRequest);
6a4312344a5a remove set rfb TreeTask
one
parents: 19
diff changeset
76 }
16
e654b2e4de64 add TreeTask.java
one
parents:
diff changeset
77 }
e654b2e4de64 add TreeTask.java
one
parents:
diff changeset
78 }
e654b2e4de64 add TreeTask.java
one
parents:
diff changeset
79
19
ea83f4be0cc9 remove is and os
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
80 private int getZrleLength(FramebufferUpdateRectangle rect)
ea83f4be0cc9 remove is and os
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
81 throws TransportException {
ea83f4be0cc9 remove is and os
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
82 int zrleLength = 0;
ea83f4be0cc9 remove is and os
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
83 if (rect.getEncodingType() == EncodingType.ZRLE
ea83f4be0cc9 remove is and os
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
84 || rect.getEncodingType() == EncodingType.ZRLEE
ea83f4be0cc9 remove is and os
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
85 || rect.getEncodingType() == EncodingType.ZLIB) {
ea83f4be0cc9 remove is and os
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
86 zrleLength = reader.readInt32();
ea83f4be0cc9 remove is and os
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
87 }
ea83f4be0cc9 remove is and os
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
88 return zrleLength + 20;
ea83f4be0cc9 remove is and os
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
89 }
16
e654b2e4de64 add TreeTask.java
one
parents:
diff changeset
90
e654b2e4de64 add TreeTask.java
one
parents:
diff changeset
91 }