このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。
後一歩なんだが、肝心のサーバメッセージをやってなかった。
ということで、暫くはクライアントの時と同じように、
メッセージクラスを設計していこう。
基本的なサーバは 4 個だけと少なめだが、
FramebufferUpdate メッセージには、
符号化方式というややこしい代物がついてくる。
これは RFB の目玉部分だから仕方ない。
0 - FramebufferUpdate
1 - SetColourMapEntries
2 - Bell
3 - ServerCutText
サーバメッセージはクライアントメッセージと同じく、
メッセージの長さは可変である。
まずは例によって、Message インタフェースを拡張した、
ServerMessage インタフェースを作る。
========== ServerMessage.java ==========
package jp.loafer.rfb.message.server;
import jp.loafer.rfb.message.Message;
/**
* サーバがクライアントに送る通常メッセージ。
* @author kes
*/
public interface ServerMessage extends Message {
/**
* フレームバッファの更新メッセージ。
*/
public static final int FRAMEBUFFER_UPDATE = 0;
/**
* カラーテーブ通知メッセージ。
*/
public static final int SET_COLOR_MAP_ENTRIES = 1;
/**
* ベル音通知メッセージ。
*/
public static final int BELL = 2;
/**
* サーバ側コピーメッセージ。
*/
public static final int SERVER_CUT_TEXT = 3;
/**
* メッセージの種類を取得。
* @return メッセージの種類。
*/
int getType();
}
========== end of ServerMessage.java ==========
ClientMessage と同じ考え方による実装だ。
この勢いで、既定の実装も用意してしまおう。
========== BaseServerMessage.java ==========
package jp.loafer.rfb.message.server;
import java.io.IOException;
import jp.loafer.rfb.RFBContext;
import jp.loafer.rfb.io.RFBInputStream;
import jp.loafer.rfb.io.RFBOutputStream;
import jp.loafer.rfb.message.Message;
/**
* BaseServerMessage クラス。
* @author kes
*/
public abstract class BaseServerMessage implements ServerMessage {
/**
* {@link BaseServerMessage} のインスタンスを作成。
*/
public BaseServerMessage() {
//
}
/**
* @see Message#read(RFBContext, RFBInputStream)
*/
public void read(RFBContext context, RFBInputStream in) throws IOException {
int value = in.readU8();
if (value != getType()) throw new IOException("Message type mismatch");
}
/**
* @see Message#write(RFBContext, RFBOutputStream)
*/
public void write(RFBContext context, RFBOutputStream out) throws IOException {
out.writeU8((short)getType());
}
}
========== end of BaseServerMessage.java ==========
サーバメッセージも、クライアントメッセージと同じく、
メッセージの先頭に種類を表す 1 バイトが存在する。
read や write の実装もほぼ同じだ。
しかし、こんなにも時間がかかるとは思わんかった。
だいぶ飽きてきたなぁ。いまさら中断できへんけど。