changeset 531:13d3c4341d14

remove .idea modules fix for loop
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 04 May 2019 14:17:33 +0900
parents 18c461305cc3
children 9292035b8d93
files .idea/modules.xml Todo.txt src/main/java/com/glavsoft/rfb/encoding/decoder/ZRLEDecoder.java
diffstat 3 files changed, 53 insertions(+), 75 deletions(-) [+]
line wrap: on
line diff
--- 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 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ProjectModuleManager">
-    <modules>
-      <module fileurl="file://$PROJECT_DIR$/TreeVNC.iml" filepath="$PROJECT_DIR$/TreeVNC.iml" />
-      <module fileurl="file://$PROJECT_DIR$/.idea/modules/TreeVNC_main.iml" filepath="$PROJECT_DIR$/.idea/modules/TreeVNC_main.iml" group="TreeVNC" />
-      <module fileurl="file://$PROJECT_DIR$/.idea/modules/TreeVNC_test.iml" filepath="$PROJECT_DIR$/.idea/modules/TreeVNC_test.iml" group="TreeVNC" />
-      <module fileurl="file://$PROJECT_DIR$/.idea/modules/TreeVNC_viewerSwing.iml" filepath="$PROJECT_DIR$/.idea/modules/TreeVNC_viewerSwing.iml" group="TreeVNC" />
-    </modules>
-  </component>
-</project>
\ No newline at end of file
--- 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 に送ると、
--- 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,