# HG changeset patch # User Shinji KONO # Date 1582304073 -32400 # Node ID cab01ab88422d43affcb36483d3563f40bbc3576 # Parent 994a710100fde18024cf1d42010c555bcd1c7b84 fix blocking diff -r 994a710100fd -r cab01ab88422 src/main/java/com/glavsoft/rfb/encoding/decoder/ZRLEDecoder.java --- a/src/main/java/com/glavsoft/rfb/encoding/decoder/ZRLEDecoder.java Fri Feb 21 18:20:36 2020 +0900 +++ b/src/main/java/com/glavsoft/rfb/encoding/decoder/ZRLEDecoder.java Sat Feb 22 01:54:33 2020 +0900 @@ -101,6 +101,7 @@ deflater.deflate(c1); flushMuticast(rfb, bytes); } + System.out.println("blocking "+rect); return; } @@ -208,13 +209,13 @@ boolean end = flushDeflator(false," end of phase 0 "); width = 0; flushRectangle(c1rect,c1.position()); - if (end) { + c1rect = new FramebufferUpdateRectangle(rect.x,c1rect.y+tileH,0,0); + if (end || c1rect.y + tileY >= rect.y+rect.height) { flushMuticast(rfb,bytes); return; } c1.position(c1.position()+ RECT_HEADER_SIZE); // header space prevC1Offset = c1.position(); - c1rect = new FramebufferUpdateRectangle(rect.x,c1rect.y+tileH,0,0); } } else { // phase 1 if (width >= rect.width) { // next line @@ -227,7 +228,7 @@ c0rect = c1rect; } c1rect = new FramebufferUpdateRectangle(rect.x, c0rect.y+c0rect.height, 0, 0); - if (end) { + if (end || c1rect.y + tileY >= rect.y+rect.height) { c0rect = null; // next will be first phase 1 case flushMuticast(rfb,bytes); return; @@ -279,6 +280,8 @@ private void flushRectangle(FramebufferUpdateRectangle rect,int pos) { if (rect.width==0) return; System.out.println("sending broadcast" + rect); + if (rect.y >= this.rect.y+this.rect.height) + System.out.println("over y broadcast" + this.rect); c1.putShort(prevC1Offset - 16, (short) rect.x); c1.putShort(prevC1Offset - 14, (short) rect.y); c1.putShort(prevC1Offset - 12, (short) rect.width);