changeset 447:3996fde6f8ed

cleanUp
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Fri, 17 Jun 2016 17:06:22 +0900
parents 9ab123ce3d9f
children 344a35b7c47f
files src/main/java/com/glavsoft/rfb/protocol/Protocol.java src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java src/viewer_swing/java/com/glavsoft/viewer/swing/SwingViewerWindow.java
diffstat 3 files changed, 77 insertions(+), 81 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/com/glavsoft/rfb/protocol/Protocol.java	Fri Jun 17 16:06:13 2016 +0900
+++ b/src/main/java/com/glavsoft/rfb/protocol/Protocol.java	Fri Jun 17 17:06:22 2016 +0900
@@ -37,11 +37,10 @@
 import com.glavsoft.rfb.protocol.state.ProtocolState;
 import com.glavsoft.transport.Reader;
 import com.glavsoft.transport.Writer;
+import jp.ac.u_ryukyu.treevnc.TreeRFBProto;
 
 import java.util.logging.Logger;
 
-import jp.ac.u_ryukyu.treevnc.TreeRFBProto;
-
 public class Protocol implements ProtocolContext, IChangeSettingsListener {
     private ProtocolState state;
     private final Logger logger;
@@ -53,7 +52,7 @@
     private final Reader reader;
     private final Writer writer;
     private String remoteDesktopName;
-    private MessageQueue messageQueue;
+    private MessageQueue messageQueue; // LinkedBlockingQueue (that is synchronized, no need of lock)
     private final DecodersContainer decoders;
     private SenderTask senderTask;
     private ReceiverTask receiverTask;
--- a/src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java	Fri Jun 17 16:06:13 2016 +0900
+++ b/src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java	Fri Jun 17 17:06:22 2016 +0900
@@ -36,6 +36,10 @@
 import com.glavsoft.rfb.encoding.PixelFormat;
 import com.glavsoft.rfb.encoding.decoder.*;
 import com.glavsoft.transport.Reader;
+import com.glavsoft.viewer.ConnectionPresenter;
+import com.glavsoft.viewer.ViewerInterface;
+import jp.ac.u_ryukyu.treevnc.CheckDelayReply;
+import jp.ac.u_ryukyu.treevnc.TreeRFBProto;
 
 import java.io.PrintWriter;
 import java.io.StringWriter;
@@ -45,9 +49,6 @@
 import java.util.TimerTask;
 import java.util.logging.Logger;
 
-import com.glavsoft.viewer.ViewerInterface;
-import jp.ac.u_ryukyu.treevnc.*;
-
 
 public class ReceiverTask implements Runnable {
     private static final byte FRAMEBUFFER_UPDATE = 0;
@@ -260,81 +261,67 @@
                     if(repaintController!=null)
                         repaintController.repaintCursor();
                 } else if (rect.getEncodingType() == EncodingType.CURSOR_POS) {
-                    renderer.decodeCursorPosition(rect);
-                    repaintController.repaintCursor();
-                } else if (rect.getEncodingType() == EncodingType.DESKTOP_SIZE || rect.getEncodingType() == EncodingType.INIT_DATA
-                         || rect.getEncodingType() == EncodingType.EXTENDED_DESKTOP_SIZE) {
-                    if (rect.getEncodingType() == EncodingType.EXTENDED_DESKTOP_SIZE){
-                        int numberOfScreen = reader.readByte();
-                        reader.readBytes(3);
-                        LinkedList<FramebufferUpdateRectangle> screens = new LinkedList<FramebufferUpdateRectangle>();
-                        for (int i = 0; i < numberOfScreen; i++){
-                            long id = reader.readUInt32();
-                            int x = reader.readUInt16();
-                            int y = reader.readUInt16();
-                            int width = reader.readUInt16();
-                            int height = reader.readUInt16();
-                            long flag = reader.readUInt32();
+                        renderer.decodeCursorPosition(rect);
+                        repaintController.repaintCursor();
+                } else if (rect.getEncodingType() == EncodingType.EXTENDED_DESKTOP_SIZE) {
+                    int numberOfScreen = reader.readByte();
+                    reader.readBytes(3);
+                    LinkedList<FramebufferUpdateRectangle> screens = new LinkedList<FramebufferUpdateRectangle>();
+                    for (int i = 0; i < numberOfScreen; i++) {
+                        long id = reader.readUInt32();
+                        int x = reader.readUInt16();
+                        int y = reader.readUInt16();
+                        int width = reader.readUInt16();
+                        int height = reader.readUInt16();
+                        long flag = reader.readUInt32();
 
 
-                            FramebufferUpdateRectangle screen = new FramebufferUpdateRectangle(x, y, width, height);
-                            screen.port = (int) id;
-                            screen.time = flag;
-                            screens.add(screen);
-                            System.out.println("screen " + id + ":" + "x=" + x + " y=" + y + "width=" + width + "height=" + height);
-
-                        }
-
-                        return;
-                    }
-                    fullscreenFbUpdateIncrementalRequest = new FramebufferUpdateRequestMessage(0, 0, rect.width, rect.height, false);
-                    rfb.setCuiVersion(false);
-                    boolean visible = true;
+                        FramebufferUpdateRectangle screen = new FramebufferUpdateRectangle(x, y, width, height);
+                        screen.port = (int) id;
+                        screen.time = flag;
+                        screens.add(screen);
+                        System.out.println("screen " + id + ":" + "x=" + x + " y=" + y + "width=" + width + "height=" + height);
 
-                    if (rect.getEncodingType() == EncodingType.INIT_DATA) {
-                        // VNCServer is changed, initiarize new screen.
-                        int length = reader.readInt32() - 2;
-                        short id = reader.readInt16();
-                        byte[] initData = new byte[length];
-                        reader.read(initData);
-                        String name = new String(initData, 24, length - 24, "UTF-8");
-                        context.setRemoteDesktopName(name);
-                        context.setInitData(initData);
-                        context.setFbWidth(rect.width);
-                        context.setFbHeight(rect.height);
-                        context.setX(rect.x);
-                        context.setY(rect.y);
-                        repaintController.updateRemoteDesktopName(context);
-                        reader.reset();
-                        // All children multicastqueue should be discarded here.
-//                        rfb.clearChildrenTransmission();
-                        rfb.readSendData(length + 20 + 2, reader, null, rect); // size of UpdateRectangleMessage with initData.
-                        visible = (id != rfb.getId());
+                    }
+                    return;
+                } else if (rect.getEncodingType() == EncodingType.DESKTOP_SIZE) {
+                    fullscreenFbUpdateIncrementalRequest = new FramebufferUpdateRequestMessage(rect.x, rect.y, rect.width, rect.height, false);
+                    rfb.setCuiVersion(false);
+                    renderer = repaintController.createRenderer(reader, rect.width, rect.height, context.getPixelFormat());
+                    if (rfb.hasViewer()){
+                        setScreenParameter();
                     }
-                    synchronized (renderer.getLock()) {
-                        if (!(rfb.getCuiVersion())) {
-                            renderer = repaintController.createRenderer(reader, rect.width, rect.height, context.getPixelFormat());
-                        }
+                } 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;
+                    short id = reader.readInt16();
+                    byte[] initData = new byte[length];
+                    reader.read(initData);
+                    String name = new String(initData, 24, length - 24, "UTF-8");
+                    context.setRemoteDesktopName(name);
+                    context.setInitData(initData);
+                    context.setFbWidth(rect.width);
+                    context.setFbHeight(rect.height);
+                    context.setX(rect.x);
+                    context.setY(rect.y);
+                    repaintController.updateRemoteDesktopName(context);
+                    reader.reset();
+                    // All children multicastqueue should be discarded here.
+                    //                        rfb.clearChildrenTransmission();
+                    rfb.readSendData(length + 20 + 2, reader, null, rect); // size of UpdateRectangleMessage with initData.
+                    if (!(rfb.getCuiVersion())) {
+                        renderer = repaintController.createRenderer(reader, rect.width, rect.height, context.getPixelFormat());
                     }
-                    if (rect.getEncodingType() == EncodingType.INIT_DATA) {
-                        repaintController.setVisible(visible);
-                    }
+                    repaintController.setVisible(id != rfb.getId());
                     if (rfb.hasViewer()){
-                        ViewerInterface v = rfb.getViewer();
-                        v.getConnectionPresenter().setX(rfb.getX());
-                        v.getConnectionPresenter().setY(rfb.getY());
-                        v.getConnectionPresenter().setFrameSizeWidth(rfb.frameSizeWidth);
-                        v.getConnectionPresenter().setFrameSizeHeight(rfb.frameSizeHeight);
-                        v.setFitScreen();
+                        setScreenParameter();
                     }
-                    if (rfb.isTreeManager()) {
-                        context.sendMessage(new FramebufferUpdateRequestMessage(rect.x, rect.y, rect.width, rect.height, false));
-                    }
-
                 } else if (rect.getEncodingType() == EncodingType.CHECK_DELAY) {
-                    int checkDelaySize = 24;
-                    int port = rfb.acceptPort;
-                    String address = rfb.getMyAddress();
+                        int checkDelaySize = 24;
+                        int port = rfb.acceptPort;
+                        String address = rfb.getMyAddress();
                     int dataLen = reader.readInt32();
                     sendCheckDelayReply(rect.time, port, address, dataLen);
                     reader.reset();
@@ -371,7 +358,17 @@
         }
     }
 
-    synchronized private void sendFrameBufferUpdateRequest() {
+    private void setScreenParameter() {
+        ViewerInterface v = rfb.getViewer();
+        ConnectionPresenter cp = v.getConnectionPresenter();
+        cp.setX(rfb.getX());
+        cp.setY(rfb.getY());
+        cp.setFrameSizeWidth(rfb.frameSizeWidth);
+        cp.setFrameSizeHeight(rfb.frameSizeHeight);
+        v.setFitScreen();
+    }
+
+    private void sendFrameBufferUpdateRequest() {
         if (needSendPixelFormat) {
             needSendPixelFormat = false;
             context.setPixelFormat(pixelFormat);
@@ -380,7 +377,7 @@
             context.sendRefreshMessage();
             logger.fine("sent: nonincremental fb update");
         } else {
-            context.sendMessage(new FramebufferUpdateRequestMessage(rfb.getX(), rfb.getY(), rfb.frameSizeWidth * rfb.getRetinaScale(), rfb.frameSizeHeight * rfb.getRetinaScale(), false));
+            context.sendMessage(new FramebufferUpdateRequestMessage(rfb.getX(), rfb.getY(), rfb.frameSizeWidth, rfb.frameSizeHeight, false));
         }
     }
 
--- a/src/viewer_swing/java/com/glavsoft/viewer/swing/SwingViewerWindow.java	Fri Jun 17 16:06:13 2016 +0900
+++ b/src/viewer_swing/java/com/glavsoft/viewer/swing/SwingViewerWindow.java	Fri Jun 17 17:06:22 2016 +0900
@@ -857,13 +857,13 @@
                 ArrayList<Rectangle> rectangles = viewer.getScreenRectangles();
                 if (rectangles.size() == 1) { // single display
                     screenChangeRequest(context, 0);
-                } else if (rectangles.size() == 2){ // dual display
+                } else if (rectangles.size() > 1){ // dual display
                     ScreenChangeSelectionPanel selectionPanel = new ScreenChangeSelectionPanel(viewerWindow, context);
                     for (int i = 0; i < rectangles.size(); i++) {
                         Rectangle rectangle = rectangles.get(i);
-                        int scale = retinaScale(i);
-                        int screenWidth = rectangle.width * scale;
-                        int screenHeight = rectangle.height * scale;
+                        // int scale = retinaScale(i);
+                        int screenWidth = rectangle.width; //  * scale;
+                        int screenHeight = rectangle.height; // * scale;
                         selectionPanel.checkBox(screenWidth+" X "+screenHeight);
                     }
                     selectionPanel.setButton();
@@ -990,11 +990,11 @@
         }
         int thisScreenWidth = (int) rectangles.get(thisScreenNumber).getWidth();
         int thisScreenHeight = (int) rectangles.get(thisScreenNumber).getHeight();
-        int thisRetinaScale = retinaScale(thisScreenNumber);
+        // int thisRetinaScale = retinaScale(thisScreenNumber);
 
         final int thatScreenX = presenter.getX();
         final int thatScreenY = presenter.getY();
-        int thatRetinaScale = presenter.getRetinaScale();
+        // int thatRetinaScale = presenter.getRetinaScale();
         final int thatScreenWidth = presenter.getFrameSizeWidth();
         final int thatScreenHeight = presenter.getFrameSizeHeight();
         // showScreenInfo("that", 0, thatScreenX, thatScreenY, thatScreenWidth, thatScreenHeight, thatRetinaScale);