このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。
SecurityHandshake クラスは、種類を決定した後、
その本処理を SecurityHandler に委託する。
RFB で定義されている認証手法は 2 つ。
セキュリティ無しと、VNC 認証だ。
これらを SecurityHandler を実装したクラスとして表現し、
SecurityHandshake に渡せるようにすれば、
セキュリティハンドシェイクの実装を完全に分離できる。
まずは、セキュリティ無しのほうから。
========== NullSecurityHandler.java ==========
package jp.loafer.rfb.server;
import java.io.IOException;
import jp.loafer.rfb.RFBContext;
import jp.loafer.rfb.RFBHandler;
import jp.loafer.rfb.io.RFBInputStream;
import jp.loafer.rfb.io.RFBOutputStream;
import jp.loafer.rfb.message.SecurityResultMessage;
/**
* サーバ側の認証なしセキュリティ処理。
* @author kes
*/
public class NullSecurityHandler implements SecurityHandler {
/**
* {@link NullSecurityHandler} のインスタンスを作成。
*/
public NullSecurityHandler() {
// 特になし
}
/**
* @see SecurityHandler#getType()
*/
public int getType() {
return SecurityHandler.NONE;
}
/**
* @see RFBHandler#execute(RFBContext, RFBInputStream, RFBOutputStream)
*/
public void execute(RFBContext context, RFBInputStream in,
RFBOutputStream out) throws IOException {
// RFB 3.8 以上の場合は SecurityResult で成功を返す
if (context.getVersion() >= 3008) {
SecurityResultMessage result
= new SecurityResultMessage(SecurityResultMessage.STATUS_OK);
out.writeMessage(context, result);
out.flush();
}
}
}
========== end of NullSecurityHandler.java ==========
セキュリティ無しとは言うものの、
RFB 3.8 以降では SecurityResult の返答が必須である。
これは常に成功するのでそれほど難しくはない。
この NullSecurityHandler を使えば、
セキュリティ無しのセキュリティハンドシェイクを、
以下のように簡潔に書く事ができるようになる。
// RFBContext context;
// RFBInputStream in;
// RFBOutputStream out;
SecurityHandler handler
= new NullSecurityHandler();
SecurityHandshake handshake
= new SecurityHandshake(handler);
handshake.execute(context, in, out);
楽なだけでなく、コードがすっきりする。
余談だが、どうも Java のコードを Eclipse で書いていると、
インタフェースやクラスを細分化し、
個々のクラスのコード量を少なくしたい衝動に駆られる。
しかしながら、C# のコードを Visual Studio で書いていても、
Java ほどはその欲求は起こらず、
ついつい、長く大きなクラスを書いてしまっている。
設計思想的には、Java も C# も同じ方法が通用するので、
言語的な差異が原因とは考えられない。
これは IDE が自分に与えている影響なのだろうか。
IDE 上では一切操作せず、画面を眺めながら、
紙と鉛筆で構想を練っている段階であっても、
なぜか、設計や考え方にも影響を及ぼしているようだ。
自分にとって IDE は、開発の効率化やデバッグだけでない、
なにか不思議な影響を与えるものなのである。