2007 年 1 月 15 日 23 時 55 分

RFBSession のリファクタリング


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


さて、サーバ側の実装の目処が付いた。
では、RFBSession に追加といきたいところだが、
RFBSession にあまりにも詰め込みすぎているため、
このまま進めると間違いなくスパゲティになる。
そこで先に RFBSession の整理からやろう。

まずは、最も低水準のインタフェースを定める。

========== RFBHandler.java ==========

package jp.loafer.rfb;

import java.io.IOException;

import jp.loafer.rfb.io.RFBInputStream;
import jp.loafer.rfb.io.RFBOutputStream;

/**
* ストリームより RFB メッセージを入出力し、
* 処理を行う汎用ハンドラのインタフェース。
* @author kes
*/
public interface RFBHandler {

    /**
     * ハンドラ固有の処理を実行する。
     * @param context RFB コンテキスト。
     * @param in RFB 入力ストリーム。
     * @param out RFB 出力ストリーム。
     * @throws IOException 入出力エラー。
     */
    void execute(RFBContext context, RFBInputStream in,
            RFBOutputStream out) throws IOException;

}

========== end of RFBHandler.java ==========

RFBHandler は RFB の処理を表す簡潔なインタフェースだ。
このインタフェースを実装したクラスを作るだけで、
単純に処理を幾つかのクラスに分ける事ができる。

例えば、RFBSession#processNullSecurity とか、
RFBSession#processProtocolVersion とかは、
RFBHandler#execute と同じシグネチャにしてあったため、
これらは容易に個別クラスに分けることができるはずだ。

次に、None セキュリティや、VNC 認証などの処理を表す、
SecurityHandler インタフェースを定める。

========== SecurityHandler .java ==========

package jp.loafer.rfb.server;

import jp.loafer.rfb.RFBHandler;

/**
* セキュリティ処理を表すインタフェース。
* @author kes
*/
public interface SecurityHandler extends RFBHandler {
   
    /**
     * 無効なセキュリティ処理。
     */
    public static final int INVALID = 0;

    /**
     * 認証なし。
     */
    public static final int NONE = 1;

    /**
     * VNC 認証。
     */
    public static final int VNC_AUTHENTICATION = 2;

    /**
     * セキュリティ処理の種類を取得。
     * @return セキュリティ処理の種類。
     */
    int getType();

}

========== end of SecurityHandler.java ==========

SecurityHandler は RFBHandler の一種で、
セキュリティ処理を行うものだ。
セキュリティ処理には個別に種類を表す番号があるので、
それを返す getType メソッドを定義している。

これにより、RFBSession#processNullSecurity と
RFBSession#processVNCAuthentication が、
SecurityHandler 実装クラスに分解できるはずだ。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.