Mercurial > hg > Applications > AliceVNC
view src/main/java/jp/ac/u_ryukyu/alicevnc/ReceiveUpdateRectangle.java @ 76:62e98a588f60
update Alice 570
author | Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 27 Nov 2015 12:09:41 +0900 |
parents | bd8da17bf383 |
children | 6295918b8a97 |
line wrap: on
line source
package jp.ac.u_ryukyu.alicevnc; import java.util.ArrayList; import jp.ac.u_ryukyu.ie.cr.DecodeInfomation; import com.glavsoft.exceptions.TransportException; import com.glavsoft.rfb.encoding.EncodingType; import com.glavsoft.rfb.encoding.decoder.FramebufferUpdateRectangle; import com.glavsoft.rfb.encoding.decoder.RichCursorDecoder; import com.glavsoft.rfb.encoding.decoder.ZRLEDecoder; import alice.codesegment.CodeSegment; import alice.datasegment.CommandType; import alice.datasegment.ReceiveData; import alice.datasegment.Receiver; public class ReceiveUpdateRectangle extends CodeSegment{ private Receiver info = ids.create(CommandType.PEEK); private Receiver info1 = ids.create(CommandType.TAKE); // AliceVNC Message private Receiver info2 = ids.create(CommandType.TAKE); private Receiver info3 = ids.create(CommandType.PEEK); public ReceiveUpdateRectangle(){ info.setKey("holder"); info1.setKey("updateRectangle"); info2.setKey("pixelData"); info3.setKey("_CLIST"); } @SuppressWarnings("unchecked") @Override public void run() { // send other node ArrayList<String> clist = info3.asClass(ArrayList.class); // for measurement if (info2.getReceiveData().getSetTime()) { ReceiveData r = info2.getReceiveData(); ReceiveData rData = new ReceiveData("measurement"); rData.setZipped(r.getZippedDataSize(), r.getSetZipped()); rData.setTimes(r.getTime(), r.getSetTime(), r.getDepth()); ods.put("parent", "measurement", rData);//pixelDataを受け取った時に計測用パケットを返す処理 } for (String node : clist){ if (!info1.from.equals(node)) { // not need send data comes from // Data Segment from other node is already serialized ods.flip(node, "updateRectangle", info1); //TODO need timeout counter // for measurement ReceiveData r = info2.getReceiveData(); if (!r.getSetTime()) { r.setTimes(System.currentTimeMillis(), true, 0);//送信時間をセット } ods.flip(node, "pixelData", info2); } } try { RenderAndControllerHolder holder = info.asClass(RenderAndControllerHolder.class); DecodeInfomation message = info1.asClass(DecodeInfomation.class); if (message.getEncodingType() == EncodingType.ZRLEE){ //TODO ZRLEDecoder decoder = new ZRLEDecoder(); FramebufferUpdateRectangle rect = new FramebufferUpdateRectangle( message.x, message.y, message.width, message.height); rect.encodingType = message.getEncodingType(); byte[] buf = info2.asClass(byte[].class); // this method name is wrong. decoder.decode(holder.getRenderer(), rect, buf, 0); holder.getRepaintController().repaintBitmap(rect); } else if (message.getEncodingType() == EncodingType.DESKTOP_SIZE) { holder.setRenderer( holder.getRepaintController().createRenderer(null, message.width, message.height, message.getPixelFormat()) ); boolean visible = true; if ("local".equals(info2.from)) { visible = false; } holder.getViewerWindow().setVisible(visible); } else if (message.getEncodingType() == EncodingType.RICH_CURSOR) { byte[] buf = info2.asClass(byte[].class); RichCursorDecoder.getInstance().decode(holder.getRenderer(), message, buf); holder.getRepaintController().repaintCursor(); } this.recycle(); //TODO } catch (TransportException e) { e.printStackTrace(); } } }