diff src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java @ 448:344a35b7c47f

send both frame buffer size and selected screen size in Disktop size change (INIT_DATA)
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 18 Jun 2016 20:09:46 +0900
parents 3996fde6f8ed
children d5bcae14c2cd
line wrap: on
line diff
--- a/src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java	Fri Jun 17 17:06:22 2016 +0900
+++ b/src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java	Sat Jun 18 20:09:46 2016 +0900
@@ -46,7 +46,6 @@
 import java.io.UnsupportedEncodingException;
 import java.util.LinkedList;
 import java.util.Timer;
-import java.util.TimerTask;
 import java.util.logging.Logger;
 
 
@@ -88,30 +87,17 @@
         decoders.setDecoderByType(EncodingType.ZLIB, decoder);
         decoders.setDecoderByType(EncodingType.ZRLE, decoder);
         decoders.setDecoderByType(EncodingType.ZRLEE, decoder);
-
+        if(rfb.fixingSize) {
+            context.setFbWidth(rfb.fixingSizeWidth);
+            context.setFbHeight(rfb.fixingSizeHeight);
+        }
         if(!rfb.getCuiVersion()) {
-            if (rfb.filterSingleDisplay) {
-                renderer = repaintController.createRenderer(reader, context.getFbWidth(), context.getFbHeight(), context.getPixelFormat());
-                fullscreenFbUpdateIncrementalRequest = new FramebufferUpdateRequestMessage(0, 0, rfb.getSingleWidth(), rfb.getSingleHeight(), false);
-            } else {
-                renderer = repaintController.createRenderer(reader, context.getFbWidth(), context.getFbHeight(), context.getPixelFormat());
-                fullscreenFbUpdateIncrementalRequest = new FramebufferUpdateRequestMessage(rfb.getX(), rfb.getY(), rfb.frameSizeWidth * rfb.getRetinaScale(), rfb.frameSizeHeight * rfb.getRetinaScale(), false);
-            }
+            renderer = repaintController.createRenderer(reader, context.getFbWidth(), context.getFbHeight(), context.getPixelFormat());
+            fullscreenFbUpdateIncrementalRequest = new FramebufferUpdateRequestMessage(rfb.getX(), rfb.getY(), rfb.frameSizeWidth, rfb.frameSizeHeight, false);
         }
         if(rfb.isTreeManager()) {
             fullscreenFbUpdateIncrementalRequest.sendFullScreenRequest();
             connectionFinished();
-            if(rfb.fixingSize) {
-                timer = new Timer("framebufferUpdate-request-timer", true);
-                timer.schedule(new TimerTask() {
-                    @Override
-                    public void run() { 
-                        context.setFbWidth(rfb.fixingSizeWidth);
-                        context.setFbHeight(rfb.fixingSizeHeight);
-                        context.sendMessage(new FramebufferUpdateRequestMessage(rfb.getX(), rfb.getY(), rfb.frameSizeWidth * rfb.getRetinaScale(), rfb.frameSizeHeight * rfb.getRetinaScale(), true));
-                    }
-                }, 0, 100);
-            }
         }
     }
 
@@ -289,14 +275,16 @@
                     rfb.setCuiVersion(false);
                     renderer = repaintController.createRenderer(reader, rect.width, rect.height, context.getPixelFormat());
                     if (rfb.hasViewer()){
-                        setScreenParameter();
+                        setScreenParameter(rect,rect.width,rect.height);
                     }
                 } else if (rect.getEncodingType() == EncodingType.INIT_DATA) {
                     fullscreenFbUpdateIncrementalRequest = new FramebufferUpdateRequestMessage(rect.x, rect.y, rect.width, rect.height, false);
                     rfb.setCuiVersion(false);
                     // VNCServer is changed, initiarize new screen.
-                    int length = reader.readInt32() - 2;
+                    int length = reader.readInt32() - 6;
                     short id = reader.readInt16();
+                    int singleWidth = reader.readUInt16();
+                    int singleHeight = reader.readUInt16();
                     byte[] initData = new byte[length];
                     reader.read(initData);
                     String name = new String(initData, 24, length - 24, "UTF-8");
@@ -310,13 +298,13 @@
                     reader.reset();
                     // All children multicastqueue should be discarded here.
                     //                        rfb.clearChildrenTransmission();
-                    rfb.readSendData(length + 20 + 2, reader, null, rect); // size of UpdateRectangleMessage with initData.
+                    rfb.readSendData(length + 16 + 10, reader, null, rect); // size of UpdateRectangleMessage with initData.
                     if (!(rfb.getCuiVersion())) {
                         renderer = repaintController.createRenderer(reader, rect.width, rect.height, context.getPixelFormat());
                     }
                     repaintController.setVisible(id != rfb.getId());
                     if (rfb.hasViewer()){
-                        setScreenParameter();
+                        setScreenParameter(rect,singleWidth,singleHeight);
                     }
                 } else if (rect.getEncodingType() == EncodingType.CHECK_DELAY) {
                         int checkDelaySize = 24;
@@ -358,13 +346,14 @@
         }
     }
 
-    private void setScreenParameter() {
+    private void setScreenParameter(FramebufferUpdateRectangle rect,int singleWidth ,int singleHeight) {
         ViewerInterface v = rfb.getViewer();
+        rfb.setSingleDisplaySize(singleWidth,singleHeight);
         ConnectionPresenter cp = v.getConnectionPresenter();
-        cp.setX(rfb.getX());
-        cp.setY(rfb.getY());
-        cp.setFrameSizeWidth(rfb.frameSizeWidth);
-        cp.setFrameSizeHeight(rfb.frameSizeHeight);
+        cp.setX(rect.x);
+        cp.setY(rect.y);
+        cp.setFrameSizeWidth(rect.width);
+        cp.setFrameSizeHeight(rect.height);
         v.setFitScreen();
     }