# HG changeset patch # User oc # Date 1423203109 -32400 # Node ID 2aa4fcbc5ba269ae8642b2ef0576166da6d5dff9 # Parent 49e25659ad05263e0f7b6f983f845bcfd1c8f2d8 fix framebufferUpdate diff -r 49e25659ad05 -r 2aa4fcbc5ba2 src/main/java/com/glavsoft/rfb/encoding/ServerInitMessage.java --- 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]; diff -r 49e25659ad05 -r 2aa4fcbc5ba2 src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java --- 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)); + } } } } diff -r 49e25659ad05 -r 2aa4fcbc5ba2 src/main/java/com/glavsoft/transport/Reader.java --- 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;