view src/main/java/com/glavsoft/rfb/protocol/TreeTask.java @ 19:ea83f4be0cc9

remove is and os fix numberOfRectangle fill().
author Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
date Wed, 29 Aug 2012 21:28:18 +0900
parents e654b2e4de64
children 6a4312344a5a
line wrap: on
line source

package com.glavsoft.rfb.protocol;

import jp.ac.u_ryukyu.treevnc.server.*;

import com.glavsoft.exceptions.CommonException;
import com.glavsoft.exceptions.TransportException;
import com.glavsoft.rfb.ClipboardController;
import com.glavsoft.rfb.IRepaintController;
import com.glavsoft.rfb.encoding.EncodingType;
import com.glavsoft.rfb.encoding.decoder.DecodersContainer;
import com.glavsoft.rfb.encoding.decoder.FramebufferUpdateRectangle;
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) {
		super(reader, repaintController, clipboardController, decoders,
				context, true);
		this.context = context;
		this.reader = reader;
	}

	@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();
		}
	}

	private int getZrleLength(FramebufferUpdateRectangle rect)
			throws TransportException {
		int zrleLength = 0;
		if (rect.getEncodingType() == EncodingType.ZRLE
				|| rect.getEncodingType() == EncodingType.ZRLEE
				|| rect.getEncodingType() == EncodingType.ZLIB) {
			zrleLength = reader.readInt32();
			;
		}
		return zrleLength + 20;
	}

	@Override
	public void setRfb(MyRfbProtoProxy _rfb) {
		rfb = _rfb;
	}
}