# HG changeset patch # User one # Date 1346305232 -32400 # Node ID 6a4312344a5aa26e7bb9bb2550b00ab3fe47974f # Parent bfddb801c3aa93d378b1653300476b091e517d5b remove set rfb TreeTask diff -r bfddb801c3aa -r 6a4312344a5a src/main/java/com/glavsoft/rfb/protocol/Protocol.java --- a/src/main/java/com/glavsoft/rfb/protocol/Protocol.java Wed Aug 29 23:35:54 2012 +0900 +++ b/src/main/java/com/glavsoft/rfb/protocol/Protocol.java Thu Aug 30 14:40:32 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 bfddb801c3aa -r 6a4312344a5a src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java --- a/src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java Wed Aug 29 23:35:54 2012 +0900 +++ b/src/main/java/com/glavsoft/rfb/protocol/ReceiverTask.java Thu Aug 30 14:40:32 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 bfddb801c3aa -r 6a4312344a5a src/main/java/com/glavsoft/rfb/protocol/TreeTask.java --- a/src/main/java/com/glavsoft/rfb/protocol/TreeTask.java Wed Aug 29 23:35:54 2012 +0900 +++ b/src/main/java/com/glavsoft/rfb/protocol/TreeTask.java Thu Aug 30 14:40:32 2012 +0900 @@ -6,41 +6,76 @@ 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; } @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) { + /* + decoder.decode(reader, renderer, rect); + repaintController.repaintBitmap(rect); + */ + int zrleLength = getZrleLength(rect); + reader.reset(); + rfb.readSendData(zrleLength, reader); + + } else if (rect.getEncodingType() == EncodingType.RICH_CURSOR) { + RichCursorDecoder.getInstance().decode(reader, renderer, rect); + repaintController.repaintCursor(); + } else if (rect.getEncodingType() == EncodingType.CURSOR_POS) { + renderer.decodeCursorPosition(rect); + repaintController.repaintCursor(); + } else if (rect.getEncodingType() == EncodingType.DESKTOP_SIZE) { + fullscreenFbUpdateIncrementalRequest = + new FramebufferUpdateRequestMessage(0, 0, rect.width, rect.height, true); + synchronized (renderer) { + renderer = repaintController.createRenderer(reader, rect.width, rect.height, + context.getPixelFormat()); + } + context.sendMessage(new FramebufferUpdateRequestMessage(0, 0, rect.width, rect.height, false)); +// repaintController.repaintCursor(); + } 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); + } } } @@ -56,8 +91,4 @@ return zrleLength + 20; } - @Override - public void setRfb(MyRfbProtoProxy _rfb) { - rfb = _rfb; - } } diff -r bfddb801c3aa -r 6a4312344a5a src/main/java/jp/ac/u_ryukyu/treevnc/server/MyRfbProtoProxy.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/server/MyRfbProtoProxy.java Wed Aug 29 23:35:54 2012 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/server/MyRfbProtoProxy.java Thu Aug 30 14:40:32 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 bfddb801c3aa -r 6a4312344a5a src/main/java/jp/ac/u_ryukyu/treevnc/server/VncProxyService.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/server/VncProxyService.java Wed Aug 29 23:35:54 2012 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/server/VncProxyService.java Thu Aug 30 14:40:32 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