このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。
RFB は状態(ステート)を持つプロトコルである。
例えば、ProtocolVersion メッセージを交換し、
サーバがクライアントが返したバージョンを認識すれば、
通信に利用するバージョンが確定することになる。
これは、バージョン未定⇒バージョン確定という変化となる。
メッセージは状態に影響を与えるだけではなく、
メッセージ自身が、状態による影響を受けることもある。
クライアントやサーバが送るメッセージは、
状態によって有効であったり無効であったりするのである。
この状態には色々な種類のものがあるため、
色々と変数を用意すると管理が大変となる。
状態は、接続単位でグローバルなものであるため、
処理のあらゆるところで参照される事が想定されるので、
これら状態を一括して管理するクラスがあれば便利だ。
このように総合的な状態を保持するクラスには、
「~Context」という名前をつける事が多い。
ということで、RFBContext という名前にしよう。
========== RFBContext.java ==========
package jp.loafer.rfb;
/**
* RFB の状態を保持するクラス。
* @author kes
*/
public class RFBContext {
/**
* 空の通信コンテキストを作成。
*/
public RFBContext() {
version = 3003; // 既定のバージョン
}
/**
* 通信中の RFB バージョンを取得。
* @return RFB バージョン。
*/
public int getVersion() {
return version;
}
/**
* 通信中の RFB バージョンを設定。
* @param version RFB バージョン。
*/
public void setVersion(int version) {
this.version = version;
}
// RFB の状態
// 通信バージョン
private int version;
}
========== end of RFBContext.java ==========
単純に状態に関する情報を集約させたクラスだ。
現在はバージョン値くらいだが、今後間違いなく増える。
バージョンには double 型などを使うのが自然だが、
浮動小数点数型は精度の都合、比較の時に問題が生じる。
そのため、今回はメジャー x 1000 + マイナーで計算する、
int 型にしておくことにしよう。
まあ、専用の RFBVersion クラスを作っても良いのだが、
クラスを増やしすぎるのは好みでない。
状態管理にはいくつもの方法がある。
例えば、状態自体をクラスにしてしまう手もあるが、
俺は構造体っぽいクラスで管理するほうが性に合っている。
コンテキストを作った理由は、状態をクラス間で渡すためだ。
RFBContext のインスタンスをメソッド等に渡すだけで、
簡単に通信状態を共有することができるのである。