Mercurial > hg > RemoteEditor > emacs
view test/packet/README @ 42:95301aa3ea2f
*** empty log message ***
author | gongo |
---|---|
date | Fri, 22 Aug 2008 20:27:01 +0900 |
parents | 0f547ed856f6 |
children | c4566caf403f |
line wrap: on
line source
emacs が SessionManager(以下SM) から REPcommand(以下cmd) を受け取る時のテスト -------- - 状況 - -------- emacs は SM (所謂lisp内でいうprocess) からメッセージを受け取ると set-process-filter で設定された関数が呼び出される。 その際、引数で受信した文字列を見れるわけですが、 このとき、filter の文字列に、複数の cmd がくっついてる可能性がある。 例えば、 SM から cmd が 3 つ(A,B,C)送られてきた * 例1 -> filter が呼ばれた (|A| が引数に) -> filter が呼ばれた (|B| が引数に) -> filter が呼ばれた (|C| が引数に) * 例2 -> filter が呼ばれた (|A|B| が引数に) -> filter が呼ばれた (|C| が引数に) みたいな感じで、引数に複数の cmd が連結された状態になってる可能性がある。 ------------ - 解決方法 - ------------ filter 内では process からのパケットを受け取ることはしない(らしい)ので、 1. filter が呼び出される 2. 受け取った文字列を、複数の cmd に対応できるように分割する 3. それぞれの cmd に対して処理を行う 4. 1 に戻る まあ書いてみると簡単なんですけどね。 cmd 自体はサイズがわかっているので、分割はきっと大丈夫と信じる。 /** * $Id$ * 現在、まだ動いてません */ --------- - Usage - --------- 0. redit-test-packet-recv.el の redit-test-client-program に書いてある redit-test-packet-send.pl の場所を自分の環境に合う用に書いてください 1. emacs を起動 2. M-x load-file [Enter] で recv.el を指定する 3. M-x redit-test-start で起動 *Messages* に、send.pl から送られてきたパケットが表示されているはず。 41 1 1 0 $i 0 $i が、0 〜 send_count-1 の数だけパケットが表示されると正常。 send.pl で send_count や send_interval を変えると 受け取れないパケットがある可能性がある。 それがあるうちはバグが取れていない証拠です