このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。
では、メッセージがどう流れるかテストしてみよう。
以前と同じく RFBSession を使うのだが、
これはだいぶダイエットできたはずだ。
========== RFBSession ==========
package jp.loafer.rfbdemo;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import jp.loafer.rfb.RFBContext;
import jp.loafer.rfb.io.RFBInputStream;
import jp.loafer.rfb.io.RFBOutputStream;
import jp.loafer.rfb.server.BaseRFBDisplay;
import jp.loafer.rfb.server.MessageDispatcher;
import jp.loafer.rfb.server.ProtocolVersionHandshake;
import jp.loafer.rfb.server.RFBDisplay;
import jp.loafer.rfb.server.SecurityHandler;
import jp.loafer.rfb.server.SecurityHandshake;
import jp.loafer.rfb.server.VNCAuthenticationHandler;
/**
* RFB プロトコルの処理。
* @author kes
*/
public class RFBSession {
/**
* {@link RFBSession} のインスタンスを作成。
*/
public RFBSession() {
// 処理不要
}
/**
* RFB プロトコルの開始点。
* @param in 汎用入力ストリーム。
* @param out 汎用出力ストリーム。
* @throws IOException 入出力エラー。
*/
public void execute(InputStream in, OutputStream out) throws IOException {
// 基本オブジェクトの用意
RFBContext context = new RFBContext();
RFBInputStream rin = new RFBInputStream(in);
RFBOutputStream rout = new RFBOutputStream(out);
// テスト用の値
int serverVersion = 3007; // 3.7
SecurityHandler securityHandler
= new VNCAuthenticationHandler("password");
// ProtocolVersion ハンドシェイク
{
ProtocolVersionHandshake handshake
= new ProtocolVersionHandshake(serverVersion);
handshake.execute(context, rin, rout);
}
// Security ハンドシェイク
{
SecurityHandshake handshake = new SecurityHandshake(securityHandler);
handshake.execute(context, rin, rout);
}
// メイン処理
{
RFBDisplay display = new BaseRFBDisplay(300, 200, "VNC Test Server");
MessageDispatcher dispatcher = new MessageDispatcher(display);
dispatcher.execute(context, rin, rout);
}
}
}
========== end of RFBSession ==========
ハンドシェイクや各種ハンドラを分離したことで、
非常にすっきりとしたクラスになった。
では、ちょっと実行してみよう。
いまだに画面は真っ黒(いつまで掛かるんだ?)だが、
送られたメッセージの詳細が分かるようになった。
jp.loafer.rfb.message.client.SetPixelFormatMessage[format=jp.loafer.rfb.message.PixelFormat[bitPerPixel=32,depth=24,bigEndian=false,trueColor=true,redMax=255,greenMax=255,blueMax=255,redShift=16,greenShift=8,blueShift=0]]
jp.loafer.rfb.message.client.SetEncodingsMessage[encodingTypes=[-239, -223, 16, 1, 5, 2, 0]]
jp.loafer.rfb.message.client.FramebufferUpdateRequestMessage[incremental=false,x=0,y=0,width=300,height=200]
jp.loafer.rfb.message.client.KeyEventMessage[down=true,code=65505]
jp.loafer.rfb.message.client.KeyEventMessage[down=true,code=35]
jp.loafer.rfb.message.client.KeyEventMessage[down=false,code=35]
jp.loafer.rfb.message.client.KeyEventMessage[down=false,code=65505]
jp.loafer.rfb.message.client.PointerEventMessage[mask=0,x=9,y=19]
jp.loafer.rfb.message.client.PointerEventMessage[mask=0,x=12,y=21]
jp.loafer.rfb.message.client.PointerEventMessage[mask=0,x=22,y=22]
jp.loafer.rfb.message.client.PointerEventMessage[mask=0,x=36,y=24]
jp.loafer.rfb.message.client.PointerEventMessage[mask=0,x=40,y=26]
jp.loafer.rfb.message.client.PointerEventMessage[mask=0,x=41,y=26]
jp.loafer.rfb.message.client.PointerEventMessage[mask=1,x=41,y=26]
jp.loafer.rfb.message.client.PointerEventMessage[mask=0,x=41,y=26]
jp.loafer.rfb.message.client.ClientCutTextMessage[text=テキスト]]