# HG changeset patch # User Shinji KONO # Date 1556947053 -32400 # Node ID 13d3c4341d1401d0ae1ae4b60e6e46bb67126bef # Parent 18c461305cc3f9f73d26d1b70e40378ff779d70d remove .idea modules fix for loop diff -r 18c461305cc3 -r 13d3c4341d14 .idea/modules.xml --- a/.idea/modules.xml Fri May 03 20:00:32 2019 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff -r 18c461305cc3 -r 13d3c4341d14 Todo.txt --- a/Todo.txt Fri May 03 20:00:32 2019 +0900 +++ b/Todo.txt Sat May 04 14:17:33 2019 +0900 @@ -1,4 +1,17 @@ +Sat Feb 23 08:24:24 JST 2019 + + 64kにframeBufferUpdateRectangleを複数詰め込むことにより大きさをそろえることができる。 + + +----+ + | | + +---------------+ + | | + +----+----------+ + | | + +----+ + Fri Feb 22 19:12:24 JST 2019 + マルチキャストとストリームを混在させる WhereToConnectMessage にマルチキャストのフラグを用意する ストリームなノードはツリーのルートの近い方にまとめる @@ -8,6 +21,7 @@ RectangleHeaderを書き換える部分を作成する Tue Feb 19 15:01:43 JST 2019 + マルチキャスト用のパラメーター Packet size Multicast Address @@ -18,6 +32,7 @@ FindRootReply でそのポートを教える Wed Jan 30 18:55:55 JST 2019 + directconnection 時に nodeid を正しく設定する必要がある Wed Nov 28 18:45:41 JST 2018 @@ -29,11 +44,11 @@ consolelogをlog4jに切り替える Multicast mode - RFB.readsenddataでmulticastqueueにブロッキングしたデータを挿入する - multicastqueueをmulticastport に出力するスレッドを作成する - framebufferをcopyしないでブロッキングするメソッドを作成する - ReceiveData threadをmulticastportに対して走らせる - multicastするネットワークインターフェースを選択するUIを作成する + RFB.readsenddataでmulticastqueueにブロッキングしたデータを挿入する Done + multicastqueueをmulticastport に出力するスレッドを作成する Done + framebufferをcopyしないでブロッキングするメソッドを作成する Copyが正解 + ReceiveData threadをmulticastportに対して走らせる Done + multicastするネットワークインターフェースを選択するUIを作成する 必要ない Wed June 8 15:35 JST 2016 kono @@ -47,52 +62,30 @@ Wed Jan 28 15:35 JST 2015 < 現状の問題点 > - 安定性の向上 - 無線時、切り替えが遅い - 拡大・縮小が遅い done! RenderingHint に set する値を、Quality から Speed にする done! これを TreeVNC の setting から変更出来るようにする - FitButton の UI の確認 done! -d の場合は常に画面に Fit するように設定 done! - テストの方法 - linux、win で動くかどうか VMWare で確認できる - catch節で正しい処理ができているか全てチェックする - TreeVNC起動中にPCを閉じると暴走する (再現しないから後回し) - log in の方法 log in 出来るようにする log in できなかった場合、メッセージを出す - 複数のネットワークインタフェースがある場合、繋がらないことがある - 途中でネットワークインタフェースを立ち上げるとそれを検知する - log の情報不足の解決 - - < 拡張機能 > - ルータ越え - ルータ越えの際の UI の確認 - 音声共有 - 音声共有の際の UI の確認 - - - - Fri Jul 4 19:39:28 JST 2014 ServerChangeRequest を sub tree 側が、自分向けに換えて、upper tree に送ると、 diff -r 18c461305cc3 -r 13d3c4341d14 src/main/java/com/glavsoft/rfb/encoding/decoder/ZRLEDecoder.java --- a/src/main/java/com/glavsoft/rfb/encoding/decoder/ZRLEDecoder.java Fri May 03 20:00:32 2019 +0900 +++ b/src/main/java/com/glavsoft/rfb/encoding/decoder/ZRLEDecoder.java Sat May 04 14:17:33 2019 +0900 @@ -77,7 +77,7 @@ */ - private void zrleeBlocking(TreeRFBProto rfb, ByteBuffer header, byte[] bytes, FramebufferUpdateRectangle rect) throws TransportException, DataFormatException { + private void zrleeBlocking(TreeRFBProto rfb, ByteBuffer header, FramebufferUpdateRectangle rect) { // dump32(inputs); deflater = rfb.deflater; c1 = rfb.multicastqueue.allocate(deflate_size); @@ -92,52 +92,55 @@ c1rect = new FramebufferUpdateRectangle(rect.x, rect.y, 0, 0); return; } + int spanGap = 128; - /** * * @param rfb * @param last - * @param header * @param rect * @param bytes * @param offset - * @param tileX - * @param tileY * @param tileW * @param tileH */ - public void multicastPut(TreeRFBProto rfb, boolean last, ByteBuffer header, FramebufferUpdateRectangle rect, byte[] bytes, int offset, int tileX, int tileY, int tileW, int tileH) { + public void multicastPut(TreeRFBProto rfb, boolean last, FramebufferUpdateRectangle rect, byte[] bytes, int offset, int tileW, int tileH) { int span = offset - prevoffset; deflater.setInput(bytes,prevoffset,span); prevoffset = offset; - c1rect.height += tileH; c1rect.width += tileW; if (c1rect.x > rect.x) { // phase0 if (c1.remaining() > span + spanGap && c1rect.width < rect.width) { deflater.deflate(c1, Deflater.SYNC_FLUSH); return; } - flushRectangle(rfb,rect,false); + c1rect.height += tileH; + flushRectangle(); return; } - if (!last) { // phase1 - if (c1.remaining() > span + spanGap) { - if (c1rect.width >= rect.width) { - prevLineOffset = offset; - prevC1Offset = c1.position(); - } - deflater.deflate(c1, Deflater.SYNC_FLUSH); - } else { // phase2 - c1.position(prevC1Offset); - flushRectangle(rfb,rect,false); - deflater.setInput(bytes, prevLineOffset, span); - deflater.deflate(c1, Deflater.SYNC_FLUSH); - flushRectangle(rfb,rect,false); + if (!last && c1.remaining() > span + spanGap) { // phase1 + c1rect.height += tileH; + if (c1rect.width >= rect.width) { + prevLineOffset = offset; + prevC1Offset = c1.position(); } - return; + deflater.deflate(c1, Deflater.SYNC_FLUSH); + } else { // phase2 + // rewind to the last line finish phase 1 + int savew = c1rect.width; c1rect.width = rect.width; + c1.position(prevC1Offset); + flushRectangle(); + // recompress overrun and flush phase 2 + c1rect.width = savew; c1rect.height = tileH; + deflater.setInput(bytes, prevLineOffset, span); + deflater.deflate(c1, Deflater.SYNC_FLUSH); + flushRectangle(); + if (!last) { + c1.position(c1.position() + 16); + } else { + flushMuticast(rfb); + } } - flushRectangle(rfb,rect,true); } /** @@ -146,7 +149,7 @@ * update position paramater * send muticast pacate if nessesally */ - private void flushRectangle(TreeRFBProto rfb, FramebufferUpdateRectangle rect, boolean last) { + private void flushRectangle() { c1.putShort(rectPos + 0, (short)c1rect.x); c1.putShort(rectPos + 2, (short)c1rect.y); c1.putShort(rectPos + 4, (short)c1rect.width); @@ -155,14 +158,11 @@ c1.putInt(rectPos + 12, c1.position()-rectPos-12); rectPos = c1.position(); c1.putShort(2,(short)(c1.getShort(2)+1)); - if (!last) { - c1.position(c1.position() + 16); - } else { - flushMuticast(rfb,rect); - } + c1rect.width = 0; + c1rect.height = 0; } - private void flushMuticast(TreeRFBProto rfb, FramebufferUpdateRectangle rect) { + private void flushMuticast(TreeRFBProto rfb) { deflater.deflate(c1, Deflater.FULL_FLUSH); deflater.finish(); c1.flip(); @@ -209,11 +209,7 @@ } if (rfbProto.multicastBlocking) { - try { - tileloop.zrleeBlocking(rfbProto, header, bytes, rect); - } catch (DataFormatException e) { - e.printStackTrace(); - } + tileloop.zrleeBlocking(rfbProto, header, rect); } for (int tileY = rect.y; tileY < maxY; tileY += MAX_TILE_SIZE) { int tileHeight = Math.min(maxY - tileY, MAX_TILE_SIZE); @@ -244,10 +240,10 @@ offset += decodePacked(bytes, offset, renderer, paletteSize, tileX, tileY, tileWidth, tileHeight); } } - if (rfbProto != null && rfbProto.multicastBlocking) tileloop.multicastPut(rfbProto, false, header, rect, bytes, offset, tileX, tileY,tileWidth, tileHeight); + if (rfbProto != null && rfbProto.multicastBlocking) tileloop.multicastPut(rfbProto, false, rect, bytes, offset, tileWidth, tileHeight); } } - if (rfbProto != null && rfbProto.multicastBlocking) tileloop.multicastPut(rfbProto, false, header, rect, bytes, offset, maxX, maxY, 0, 0); + if (rfbProto != null && rfbProto.multicastBlocking) tileloop.multicastPut(rfbProto, true, rect, bytes, offset, 0, 0); } private int decodePlainRle(byte[] bytes, int offset, Renderer renderer,