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 を変えると
   受け取れないパケットがある可能性がある。
   それがあるうちはバグが取れていない証拠です