# HG changeset patch # User YU # Date 1411042196 -32400 # Node ID 9abf7f305bacf439bbccd5cf3c86b891e15e57ab # Parent fde361f794440b96e82ad37e7e6ab8ba384004fa refactor diff -r fde361f79444 -r 9abf7f305bac src/main/java/com/glavsoft/rfb/encoding/decoder/ZRLEDecoder.java --- 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); } } diff -r fde361f79444 -r 9abf7f305bac src/main/java/com/glavsoft/rfb/protocol/Protocol.java --- 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; }