changeset 7:9abf7f305bac

refactor
author YU
date Thu, 18 Sep 2014 21:09:56 +0900
parents fde361f79444
children 136ee08cb788
files src/main/java/com/glavsoft/rfb/encoding/decoder/ZRLEDecoder.java src/main/java/com/glavsoft/rfb/protocol/Protocol.java
diffstat 2 files changed, 20 insertions(+), 51 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/com/glavsoft/rfb/encoding/decoder/ZRLEDecoder.java	Thu Sep 18 21:08:29 2014 +0900
+++ b/src/main/java/com/glavsoft/rfb/encoding/decoder/ZRLEDecoder.java	Thu Sep 18 21:09:56 2014 +0900
@@ -43,14 +43,21 @@
         int length = rect.width * rect.height * renderer.getBytesPerPixel();
         byte[] bytes = unzip(reader, zippedLength, length);
         int offset = zippedLength;
+
+        AliceVNCMessage message = new AliceVNCMessage();
+        message.setRectangle(rect);
+        message.unzip = bytes;
+        message.offset = offset;
+        DataSegment.getLocal().put("aliceVNCMessage", message);
+
+        setColorDataOnRenderer(renderer, rect, bytes, offset);
+    }
+
+    private void setColorDataOnRenderer(Renderer renderer,
+            FramebufferUpdateRectangle rect, byte[] bytes, int offset)
+            throws TransportException {
         int maxX = rect.x + rect.width;
         int maxY = rect.y + rect.height;
-
-        DecodeInfo info = new DecodeInfo(rect);
-        info.unzip = bytes;
-        info.offset = offset;
-        DataSegment.getLocal().put("decodeInfo", info);
-
         if (null == palette) {
             palette = new int [128];
         }
@@ -172,52 +179,14 @@
         return paletteSize * bytesPerCPixel;
     }
     
-    public void decode(DecodeInfo decodeInfo, Renderer renderer) throws TransportException {
+    public void decode(AliceVNCMessage message, Renderer renderer) throws TransportException {
         
         FramebufferUpdateRectangle rect = new FramebufferUpdateRectangle(
-                decodeInfo.x, decodeInfo.y, decodeInfo.width, decodeInfo.height);
+                message.x, message.y, message.width, message.height);
         
-        byte[] bytes = decodeInfo.unzip;
-        int offset = decodeInfo.offset;
-        int maxX = rect.x + rect.width;
-        int maxY = rect.y + rect.height;
-
-        if (null == palette) {
-            palette = new int [128];
-        }
-        if (null == decodedBitmap) {
-            decodedBitmap = new int[MAX_TILE_SIZE * MAX_TILE_SIZE];
-        }
-        for (int tileY = rect.y; tileY < maxY; tileY += MAX_TILE_SIZE) {
-            int tileHeight = Math.min(maxY - tileY, MAX_TILE_SIZE);
-
-            for (int tileX = rect.x; tileX < maxX; tileX += MAX_TILE_SIZE) {
-                int tileWidth = Math.min(maxX - tileX, MAX_TILE_SIZE);
-                int subencoding = bytes[offset++] & 0x0ff;
-                // 128 -plain RLE, 130-255 - Palette RLE
-                boolean isRle = (subencoding & 128) != 0;
-                // 2 to 16 for raw packed palette data, 130 to 255 for Palette RLE (subencoding - 128)
-                int paletteSize = subencoding & 127;
-                offset += readPalette(bytes, offset, renderer, paletteSize);
-                if (1 == subencoding) { // A solid tile consisting of a single colour
-                    renderer.fillRect(palette[0], tileX, tileY, tileWidth, tileHeight);
-                    continue;
-                }
-                if (isRle) {
-                    if (0 == paletteSize) { // subencoding == 128 (or paletteSize == 0) - Plain RLE
-                        offset += decodePlainRle(bytes, offset, renderer, tileX, tileY, tileWidth, tileHeight);
-                    } else {
-                        offset += decodePaletteRle(bytes, offset, renderer, tileX, tileY, tileWidth, tileHeight);
-                    }
-                } else {
-                    if (0 == paletteSize) { // subencoding == 0 (or paletteSize == 0) - raw CPIXEL data
-                        offset += decodeRaw(bytes, offset, renderer, tileX, tileY, tileWidth, tileHeight);
-                    } else {
-                        offset += decodePacked(bytes, offset, renderer, paletteSize, tileX, tileY, tileWidth, tileHeight);
-                    }
-                }
-            }
-        }
+        byte[] bytes = message.unzip;
+        int offset = message.offset;
+        setColorDataOnRenderer(renderer, rect, bytes, offset);
         
     }
 }
--- a/src/main/java/com/glavsoft/rfb/protocol/Protocol.java	Thu Sep 18 21:08:29 2014 +0900
+++ b/src/main/java/com/glavsoft/rfb/protocol/Protocol.java	Thu Sep 18 21:09:56 2014 +0900
@@ -308,8 +308,8 @@
         return protocolVersion;
     }
 
-    public void createMessageQueue() { // add
-        messageQueue = new MessageQueue(); 
+    public void setMessageQueue(MessageQueue queue) { // add
+        messageQueue = queue; 
         
     }