ボゾビット大量フリップ--俺がボゾビットだ!
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>
が関係する全クライアントに通知されることになっているが、
これはログイン時の
不正な着手をされた側のパーシングがチョームズい(ことがある)
不正な着手があった場合のサーバのふるまいは次の通り:
連続王手の千日手以外の不正な着手、もしくは不正な書式の指し手が送信された場合、サーバは、
+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、、