view src/main/java/com/glavsoft/rfb/encoding/decoder/ZRLEESender.java @ 232:6ee4cdca104c

send value of port and localhost in checkdelay framebufferupdate, and get this.
author oc
date Fri, 10 Oct 2014 23:39:44 +0900
parents b31903e5b02d
children d655db005535
line wrap: on
line source

package com.glavsoft.rfb.encoding.decoder;

import java.io.UnsupportedEncodingException;

import jp.ac.u_ryukyu.treevnc.TreeRFBProto;

import com.glavsoft.drawing.Renderer;
import com.glavsoft.exceptions.TransportException;
import com.glavsoft.rfb.encoding.EncodingType;
import com.glavsoft.transport.Reader;

public class ZRLEESender extends Decoder {

	private TreeRFBProto rfb;

	public ZRLEESender(TreeRFBProto rfb) {
		this.rfb = rfb;
	}

	public ZRLEESender() {
	}

	@Override
	public void decode(Reader reader, Renderer renderer,
			FramebufferUpdateRectangle rect) throws TransportException, UnsupportedEncodingException {
		// TreeVNC handling
        int dataLen = getZrleLength(rect, reader);
        byte[] bytes = new byte[rect.width * rect.height * renderer.getBytesPerPixel()];
        reader.reset();
		if (rfb.hasViewer()) {
			ZRLEDecoder decoder = new ZRLEDecoder();
			if (rfb.isTreeManager()) {
                rfb.readSendData(dataLen, reader, bytes);
				decoder.decode1(renderer, rect, bytes, 0);
				return;
			} else if (!rfb.getCuiVersion()) {
                rfb.readSendData(dataLen, reader, null);
                reader.reset();
                reader.skip(16);
				decoder.decode(reader, renderer, rect);
				return;
			}
		}
		rfb.readSendData(dataLen, reader, bytes);
	}

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

	public void readCheckDelay(Reader reader) {
		try {
			reader.reset();
			rfb.readCheckDelay(reader);
		} catch (TransportException e) {
			e.printStackTrace();
		}
	}
}