changeset 336:2aa4fcbc5ba2

fix framebufferUpdate
author oc
date Fri, 06 Feb 2015 15:11:49 +0900
parents 49e25659ad05
children c455b05f163b
files src/main/java/com/glavsoft/rfb/encoding/ServerInitMessage.java src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java src/main/java/com/glavsoft/transport/Reader.java
diffstat 3 files changed, 83 insertions(+), 84 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/com/glavsoft/rfb/encoding/ServerInitMessage.java	Fri Feb 06 11:08:33 2015 +0900
+++ b/src/main/java/com/glavsoft/rfb/encoding/ServerInitMessage.java	Fri Feb 06 15:11:49 2015 +0900
@@ -86,7 +86,7 @@
     
 	public void readServerInit(Reader reader) throws TransportException {
 		reader.mark(255);
-		reader.skypBytes(20);
+		reader.skipBytes(20);
 		int nlen = reader.readInt32();
 		int blen = 20 + 4 + nlen;
 		initData = new byte[blen];
--- a/src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java	Fri Feb 06 11:08:33 2015 +0900
+++ b/src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java	Fri Feb 06 15:11:49 2015 +0900
@@ -56,7 +56,7 @@
 
 
     private static Logger logger = Logger.getLogger("com.glavsoft.rfb.protocol.ReceiverTask");
-    private final Reader reader;
+    private Reader reader;
     private volatile boolean isRunning = false;
     private Renderer renderer;
     private final IRepaintController repaintController;
@@ -221,92 +221,91 @@
         clipboardController.updateSystemClipboard(reader.readBytes(length));
     }
 
-    public void framebufferUpdateMessage() throws CommonException, UnsupportedEncodingException {
-        reader.readByte(); // padding
-
-        this.numberOfRectangles = reader.readUInt16();
-
-        if(numberOfRectangles != 1)
-            System.out.println("numberofrectangle : " + numberOfRectangles);
-
-
-        while (numberOfRectangles-- > 0) {
-            FramebufferUpdateRectangle rect = new FramebufferUpdateRectangle();
-            rect.fill(reader);
+    public void framebufferUpdateMessage() throws CommonException {
 
-            long time = System.currentTimeMillis();
-            if(rfb.isTreeManager() && rfb.checkDelay)
-                System.out.println(time + " : size : " + rect.width * rect.height);
-
-            Decoder decoder = decoders.getDecoderByType(rect.getEncodingType());
-            logger.finest(rect.toString() + (0 == numberOfRectangles ? "\n---" : ""));
-            if (decoder != null) {
-                decoder.decode(reader, renderer, rect);  // TreeVNC processing here
-                if (rfb.getCuiVersion()) continue;
-                if (rfb.filterSingleDisplay && rect.x >= rfb.getSingleWidth()) continue;
-                repaintController.repaintBitmap(rect);
-            } else if (rect.getEncodingType() == EncodingType.RICH_CURSOR) {
-                RichCursorDecoder.getInstance().decode(reader, renderer, rect);
-                if(repaintController!=null)
+        try {
+            reader.readByte(); // padding
+            this.numberOfRectangles = reader.readUInt16();
+            if(numberOfRectangles != 1)
+                System.out.println("numberofrectangle : " + numberOfRectangles);
+            while (numberOfRectangles-- > 0) {
+                FramebufferUpdateRectangle rect = new FramebufferUpdateRectangle();
+                rect.fill(reader);
+                long time = System.currentTimeMillis();
+                if(rfb.isTreeManager() && rfb.checkDelay)
+                    System.out.println(time + " : size : " + rect.width * rect.height);
+                Decoder decoder = decoders.getDecoderByType(rect.getEncodingType());
+                logger.finest(rect.toString() + (0 == numberOfRectangles ? "\n---" : ""));
+                if (decoder != null) {
+                    decoder.decode(reader, renderer, rect);  // TreeVNC processing here
+                    if (rfb.getCuiVersion()) continue;
+                    if (rfb.filterSingleDisplay && rect.x >= rfb.getSingleWidth()) continue;
+                    repaintController.repaintBitmap(rect);
+                } else if (rect.getEncodingType() == EncodingType.RICH_CURSOR) {
+                    RichCursorDecoder.getInstance().decode(reader, renderer, rect);
+                    if(repaintController!=null)
+                        repaintController.repaintCursor();
+                } else if (rect.getEncodingType() == EncodingType.CURSOR_POS) {
+                    renderer.decodeCursorPosition(rect);
                     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 ) {
-                fullscreenFbUpdateIncrementalRequest = new FramebufferUpdateRequestMessage(0, 0, rect.width, rect.height, false);
-                rfb.setCuiVersion(false);
-                boolean visible = true;
-                if (rect.getEncodingType() == EncodingType.INIT_DATA) {
-                    int length = reader.readInt32();
-                    byte[] initData = new byte[length];
-                    reader.read(initData);
-                    String name = new String(initData, 24, length - 24, "UTF-8");
-                    rfb.getContext().setRemoteDesktopName(name);
-                    rfb.getContext().setInitData(initData);
-                    repaintController.updateRemoteDesktopName(rfb.getContext());
+                } else if (rect.getEncodingType() == EncodingType.DESKTOP_SIZE || rect.getEncodingType() == EncodingType.INIT_DATA ) {
+                    fullscreenFbUpdateIncrementalRequest = new FramebufferUpdateRequestMessage(0, 0, rect.width, rect.height, false);
+                    rfb.setCuiVersion(false);
+                    boolean visible = true;
+                    if (rect.getEncodingType() == EncodingType.INIT_DATA) {
+                        int length = reader.readInt32();
+                        byte[] initData = new byte[length];
+                        reader.read(initData);
+                        String name = new String(initData, 24, length - 24, "UTF-8");
+                        rfb.getContext().setRemoteDesktopName(name);
+                        rfb.getContext().setInitData(initData);
+                        repaintController.updateRemoteDesktopName(rfb.getContext());
+                        reader.reset();
+                        rfb.readSendData(length + 20, reader, null, rect); // size of UpdateRectangleMessage with initData.
+                        short id = (short) rect.x;
+                        visible = (id != rfb.getId());
+                    }
+                    synchronized (renderer.getLock()) {
+                        if(!(rfb.getCuiVersion()))
+                            renderer = repaintController.createRenderer(reader, rect.width, rect.height, context.getPixelFormat());
+                    }
+                    if (rect.getEncodingType() == EncodingType.INIT_DATA) {
+                        repaintController.setVisible(visible);
+                    }
+                    context.sendMessage(new FramebufferUpdateRequestMessage(0, 0,  rect.width, rect.height, false));
+                    //				repaintController.repaintCursor();
+                } else if (rect.getEncodingType() == EncodingType.CHECK_DELAY) {
+                    int checkDelaySize = 24;
                     reader.reset();
-                    rfb.readSendData(length + 20, reader, null, rect); // size of UpdateRectangleMessage with initData.
-                    short id = (short) rect.x;
-                    visible = (id != rfb.getId());
-                }
-                synchronized (renderer.getLock()) {
-                    if(!(rfb.getCuiVersion()))
-                        renderer = repaintController.createRenderer(reader, rect.width, rect.height, context.getPixelFormat());
-                }
-                if (rect.getEncodingType() == EncodingType.INIT_DATA) {
-                    repaintController.setVisible(visible);
-                }
-                context.sendMessage(new FramebufferUpdateRequestMessage(0, 0,  rect.width, rect.height, false));
-                //				repaintController.repaintCursor();
-            } else if (rect.getEncodingType() == EncodingType.CHECK_DELAY) {
-                int checkDelaySize = 24;
-                reader.reset();
-                rfb.readSendData(checkDelaySize, reader, null, rect);
-                int port = rfb.acceptPort;
-                String address = rfb.getMyAddress();
-                sendCheckDelayReply(rect.time, port, address);
-            } else if (rect.getEncodingType() == EncodingType.SEND_SINGLE_DISPLAY_SIZE) {
-                rfb.setSingleDisplaySize(rect.width, rect.height);
-                // 下に送る
-            } else if (rect.getEncodingType() == EncodingType.SOUND) {
-                // SOUNDを受信した時の処理を
-            } else
-                throw new CommonException("Unprocessed encoding: " + rect.toString());
+                    rfb.readSendData(checkDelaySize, reader, null, rect);
+                    int port = rfb.acceptPort;
+                    String address = rfb.getMyAddress();
+                    sendCheckDelayReply(rect.time, port, address);
+                } else if (rect.getEncodingType() == EncodingType.SEND_SINGLE_DISPLAY_SIZE) {
+                    rfb.setSingleDisplaySize(rect.width, rect.height);
+                    // 下に送る
+                } else if (rect.getEncodingType() == EncodingType.SOUND) {
+                    // SOUNDを受信した時の処理を
+                } else
+                    throw new CommonException("Unprocessed encoding: " + rect.toString());
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+            reader.close();
         }
 
-        if (!rfb.isTreeManager()) {
-            return;
-        }
-        synchronized (this) {
-            if (needSendPixelFormat) {
-                needSendPixelFormat = false;
-                context.setPixelFormat(pixelFormat);
-                context.sendMessage(new SetPixelFormatMessage(pixelFormat));
-                logger.fine("sent: "+pixelFormat);
-                context.sendRefreshMessage();
-                logger.fine("sent: nonincremental fb update");
-            } else {
-                context.sendMessage(new FramebufferUpdateRequestMessage(0, 0, context.getFbWidth(), context.getFbHeight(), false));
+        if (rfb.isTreeManager()) {
+            synchronized (this) {
+                if (needSendPixelFormat) {
+                    needSendPixelFormat = false;
+                    context.setPixelFormat(pixelFormat);
+                    context.sendMessage(new SetPixelFormatMessage(pixelFormat));
+                    logger.fine("sent: " + pixelFormat);
+                    context.sendRefreshMessage();
+                    logger.fine("sent: nonincremental fb update");
+                } else {
+                    context.sendMessage(new FramebufferUpdateRequestMessage(0, 0, context.getFbWidth(), context.getFbHeight(), false));
+                }
             }
         }
     }
--- a/src/main/java/com/glavsoft/transport/Reader.java	Fri Feb 06 11:08:33 2015 +0900
+++ b/src/main/java/com/glavsoft/transport/Reader.java	Fri Feb 06 15:11:49 2015 +0900
@@ -193,7 +193,7 @@
         }
     }
 
-    public int skypBytes(int n) throws TransportException {
+    public int skipBytes(int n) throws TransportException {
         try {
             int r = is.skipBytes(n);
             return r;