思うだけで学ばない日記 2.0

思うだけで学ばない日記から移転しました☆!よろしくお願いします。

ボゾビット大量フリップ--俺がボゾビットだ!

CSAサーバ プロトコル ver.1.1.3を読みながらログイン→対局→ゲーム終了の流れを書き下していっていくつか疑問が残った。CSAサーバ プロトコルを正しく解釈するクライアントの実装は実はムズいといわざるおえない

サーバからLOGOUT:completeが送られてくるタイミング

ログイン中いつ送ってこられるかわからない感じに書かれているが本当のところどうなのか

サーバから%CHUDANが送られてくるタイミング

対局中いつ送ってこられるかわからない感じに書かれているが本当のところどうなのか
これは上のLOGOUT:completeよりも解釈に悩む

プロトコルでは%CHUDANに関して、

 その他、サーバは必要に応じて、

#CHUDAN

というメッセージを送信し、対局の中断を宣言することがある。 この場合、クライアントは自動的もしくは手動により、その時点からの再開が可能な状態で対局を中断する。
(CSAサーバ プロトコル ver.1.1.3)

と書かれているが、では例えば指し手

+7776FU

を送った直後に%CHUDANが来て+7776FUの消費時間が通知されなかった場合、どうやれば「その時点からの再開が可能な状態で対局を中断する」ことができるのかがわからない、

とは?

対局条件を提示されたクライアントのどれかがREJECTした場合、サーバーからは

REJECT:<GameID> by <rejector>

が関係する全クライアントに通知されることになっているが、の定義が見あたらない、、
これはログイン時のなのか、NAME+/-で通知されるプレイヤ名なのか、それらとは別の何かなのか、、

不正な着手をされた側のパーシングがチョームズい(ことがある)

不正な着手があった場合のサーバのふるまいは次の通り:

 連続王手の千日手以外の不正な着手、もしくは不正な書式の指し手が送信された場合、サーバは、

+0031FU,T1
#ILLEGAL_MOVE
#WIN(LOSE)

と、通常の指し手および消費時間に加え、その手が不正な指し手であることを示す2行目の情報と、勝敗を表す3行目の情報の計3行を双方に送る。不正な書式の指し手が送られた場合、その内容のすべてを表示しないことがある。Formatが 'Shogi 1.0'である場合、不正な書式の指し手文字列は、文字列の先頭7文字から使用可能な文字のみが切り出されて送信される。
(CSAサーバ プロトコル ver.1.1.3)

これだと異常なクライアントが"\n\n$%#\""みたいな文字列を生成した場合、それと対局しているクライアントは

(空行)
#ILLIEGAL MOVE
#WIN

を受けるかも知れないし、

%
#ILLIEGAL MOVE
#WIN

かもしれないが、どっちにしろ再帰降下パーサっぽく単純に行を到着順に先頭からパーシングしていけば済む話で無くなってしまう、、

特に「使用可能な文字」に'#'が含まれていたりすると最悪だ

#TIME_UP
#ILLIEGAL MOVE
#WIN

なんて送ってこられたら一体どうすればorz、、