# HG changeset patch # User one # Date 1346307271 -32400 # Node ID 8c15ff5f0f8ebb5f0023a06110b32bba9d97eaea # Parent 1fe39e8ba3e96b6e1dd9721e15a6740e599fe714# Parent acf1a9eb47105afc47b1f55f441c03fb1a89ca97 Merge with acf1a9eb47105afc47b1f55f441c03fb1a89ca97 diff -r acf1a9eb4710 -r 8c15ff5f0f8e src/main/java/com/glavsoft/rfb/protocol/Protocol.java --- a/src/main/java/com/glavsoft/rfb/protocol/Protocol.java Thu Aug 30 10:41:57 2012 +0900 +++ b/src/main/java/com/glavsoft/rfb/protocol/Protocol.java Thu Aug 30 15:14:31 2012 +0900 @@ -318,8 +318,7 @@ receiverTask = new TreeTask( reader, repaintController, clipboardController, - decoders, this, true); - receiverTask.setRfb(rfb); + decoders, this, rfb); receiverThread = new Thread(receiverTask); receiverThread.start(); } diff -r acf1a9eb4710 -r 8c15ff5f0f8e src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java --- a/src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java Thu Aug 30 10:41:57 2012 +0900 +++ b/src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java Thu Aug 30 15:14:31 2012 +0900 @@ -62,8 +62,8 @@ protected final DecodersContainer decoders; protected FramebufferUpdateRequestMessage fullscreenFbUpdateIncrementalRequest; protected final ProtocolContext context; - private PixelFormat pixelFormat; - private boolean needSendPixelFormat; + protected PixelFormat pixelFormat; + protected boolean needSendPixelFormat; public ReceiverTask(Reader reader, IRepaintController repaintController, ClipboardController clipboardController, @@ -73,8 +73,8 @@ this.clipboardController = clipboardController; this.context = context; this.decoders = decoders; - //renderer = repaintController.createRenderer(reader, context.getFbWidth(), context.getFbHeight(), - //context.getPixelFormat()); + renderer = repaintController.createRenderer(reader, context.getFbWidth(), context.getFbHeight(), + context.getPixelFormat()); fullscreenFbUpdateIncrementalRequest = new FramebufferUpdateRequestMessage(0, 0, context.getFbWidth(), context.getFbHeight(), true); } @@ -222,9 +222,4 @@ public void stopTask() { isRunning = false; } - - public void setRfb(MyRfbProtoProxy rfb) { - /*nop*/ - } - } diff -r acf1a9eb4710 -r 8c15ff5f0f8e src/main/java/com/glavsoft/rfb/protocol/TreeTask.java --- a/src/main/java/com/glavsoft/rfb/protocol/TreeTask.java Thu Aug 30 10:41:57 2012 +0900 +++ b/src/main/java/com/glavsoft/rfb/protocol/TreeTask.java Thu Aug 30 15:14:31 2012 +0900 @@ -6,41 +6,74 @@ import com.glavsoft.exceptions.TransportException; import com.glavsoft.rfb.ClipboardController; import com.glavsoft.rfb.IRepaintController; +import com.glavsoft.rfb.client.FramebufferUpdateRequestMessage; +import com.glavsoft.rfb.client.SetPixelFormatMessage; import com.glavsoft.rfb.encoding.EncodingType; +import com.glavsoft.rfb.encoding.decoder.Decoder; import com.glavsoft.rfb.encoding.decoder.DecodersContainer; import com.glavsoft.rfb.encoding.decoder.FramebufferUpdateRectangle; +import com.glavsoft.rfb.encoding.decoder.RichCursorDecoder; import com.glavsoft.transport.Reader; public class TreeTask extends ReceiverTask { final static String versionMsg_3_855 = "RFB 003.855\n"; - private Reader reader; private MyRfbProtoProxy rfb; - private ProtocolContext context; public TreeTask(Reader reader, IRepaintController repaintController, ClipboardController clipboardController, - DecodersContainer decoders, ProtocolContext context, boolean flag) { + DecodersContainer decoders, ProtocolContext context, MyRfbProtoProxy _rfb) { super(reader, repaintController, clipboardController, decoders, context, true); - this.context = context; - this.reader = reader; + rfb = _rfb; } + /* + * (non-Javadoc) + * proxy + * no Repaint + * decoder!=0 ZRLE -> ZRLEE + * readSendData(); + * client + * Repaint + * no context.send(); + * if necessary ZRLEE -> ZRLE + * readSendData(); + */ @Override public void framebufferUpdateMessage() throws CommonException { reader.readByte(); // padding int numberOfRectangles = reader.readUInt16(); // number of rectangles + while (numberOfRectangles-- > 0) { FramebufferUpdateRectangle rect = new FramebufferUpdateRectangle(); rect.fill(reader); - int zrleLength = getZrleLength(rect); - reader.reset(); - rfb.readSendData(zrleLength, reader); - boolean fullUpdateNeeded = false; - int w = context.getFbWidth(); - int h = context.getFbHeight(); - rfb.writeFramebufferUpdateRequest(0, 0, w, h, !fullUpdateNeeded); - // rfb.checkDelayData(); + + Decoder decoder = decoders.getDecoderByType(rect.getEncodingType()); + logger.finest(rect.toString() + (0 == numberOfRectangles ? "\n---" : "")); + if (decoder != null) { + int zrleLength = getZrleLength(rect); + reader.reset(); + rfb.readSendData(zrleLength, reader); + } else if (rect.getEncodingType() == EncodingType.RICH_CURSOR) { + } else if (rect.getEncodingType() == EncodingType.CURSOR_POS) { + } else if (rect.getEncodingType() == EncodingType.DESKTOP_SIZE) { + fullscreenFbUpdateIncrementalRequest = + new FramebufferUpdateRequestMessage(0, 0, rect.width, rect.height, true); + context.sendMessage(new FramebufferUpdateRequestMessage(0, 0, rect.width, rect.height, false)); + } else + throw new CommonException("Unprocessed encoding: " + rect.toString()); + } + 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(fullscreenFbUpdateIncrementalRequest); + } } } @@ -51,13 +84,8 @@ || rect.getEncodingType() == EncodingType.ZRLEE || rect.getEncodingType() == EncodingType.ZLIB) { zrleLength = reader.readInt32(); - ; } return zrleLength + 20; } - @Override - public void setRfb(MyRfbProtoProxy _rfb) { - rfb = _rfb; - } } diff -r acf1a9eb4710 -r 8c15ff5f0f8e src/main/java/jp/ac/u_ryukyu/treevnc/server/MyRfbProtoProxy.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/server/MyRfbProtoProxy.java Thu Aug 30 10:41:57 2012 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/server/MyRfbProtoProxy.java Thu Aug 30 15:14:31 2012 +0900 @@ -80,7 +80,7 @@ } public void setStream(Writer _writer) { - os = _writer; +// os = _writer; } void initServSock(int port) throws IOException { @@ -773,7 +773,7 @@ b[8] = (byte) ((h >> 8) & 0xff); b[9] = (byte) (h & 0xff); - os.write(b); +// os.write(b); } public void setProtocolContext(Protocol workingProtocol) { diff -r acf1a9eb4710 -r 8c15ff5f0f8e src/main/java/jp/ac/u_ryukyu/treevnc/server/VncProxyService.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/server/VncProxyService.java Thu Aug 30 10:41:57 2012 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/server/VncProxyService.java Thu Aug 30 15:14:31 2012 +0900 @@ -145,13 +145,12 @@ settings.addListener(clipboardController); surface = new Surface(workingProtocol, this, uiSettings.getScaleFactor()); // this method - /* settings.addListener(this); uiSettings.addListener(surface); containerFrame = createContainer(); connectionManager.setContainerFrame(containerFrame); updateFrameTitle(); - */ + workingProtocol.startNormalHandling(this, surface, clipboardController,rfb); // rfb.setInitData(workingProtocol.getInitData()); too early