2007 年 1 月 24 日 23 時 19 分

RFBDisplay の既定実装


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


RFBDisplay はメッセージ処理の基底となるのだが、
今日は RFBDisplay の既定の実装について考えてみよう。

メイン処理に入ると、遠隔操作のモードとなる。
クライアントはマウスやキーボードから入力を行うと、
仮想画面(RFBDisplay)に何かしらの変化が起きる。

では、クライアントメッセージを見直し、
それぞれがどのような種類であり、
サーバにどのような変化をもたらすか調べてみよう。

    0 - SetPixelFormat(通信画素形式の変更)
    1 - FixColourMapEntries(通信画素形式の変更)
    2 - SetEncodings(通信符号化方式の変更)
    3 - FramebufferUpdateRequest(画面イベント)
    4 - KeyEvent(画面イベント)
    5 - PointerEvent(画面イベント)
    6 - ClientCutText(クリップボードの変更)

変化の中には、通信に影響を与えるものもある。

0 ~ 2 は、通信内容に変化を与えるメッセージだ。
これらはクライアントに送信する画素に関する変更なので、
サーバが送る画素メッセージの形式に影響を与える。
そのため、その変更があったことを記憶しておく必要がある。

3 ~ 5 は入力イベントであるため、
基本的に無視してもよさそうである。
3 は画面を描画しなければならないが、
これは末端(具象クラス)が提供するものなので、
恐らく既定の実装は特に必要ない。

ただ、PointerEvent メッセージの所でも書いたが、
メッセージの渡され方によっては、
その状態を保存する必要があるかもしれない。

http://mixi.jp/view_diary.pl?id=312414139&owner_id=2300658

6 はクリップボードの変化なので、
無視しても通信内容に直接影響を与えることはないが、
サーバが貼り付け系処理をサポートする際に、
それを必要とする場合がある。
システムのクリップボードを使う必要はないので、
単にクリップボードの文字列を記憶しておくだけで良い。

だいたいの方針はこんなところかな。



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