# HG changeset patch # User Shinji KONO # Date 1466150782 -32400 # Node ID 3996fde6f8edcce4f458acb6531e7fe1267d9bfa # Parent 9ab123ce3d9f72190ffcf57aafa2b3c1469c2009 cleanUp diff -r 9ab123ce3d9f -r 3996fde6f8ed src/main/java/com/glavsoft/rfb/protocol/Protocol.java --- 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; diff -r 9ab123ce3d9f -r 3996fde6f8ed src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java --- 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 screens = new LinkedList(); - 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 screens = new LinkedList(); + 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)); } } diff -r 9ab123ce3d9f -r 3996fde6f8ed src/viewer_swing/java/com/glavsoft/viewer/swing/SwingViewerWindow.java --- 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 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);