サーバ(shogi-server)の仕様

目次


状態遷移

(標準)CSAモードと拡張モードの二つをサポートする。状態遷移図

CSAモード

login
client: LOGIN username passwordで接続。 game_waiting ステータスに移行。password として gamenameとして適切な文字列を送ると gamename としてマッチングに用いられる。そうでない場合は、 default-1500-0に固定。どちらの場合も先手、後手 の選択は出来ない。
game_waiting
server: 相手が見つかると対局条件表示。agree_waiting ステータスに移行
agree_waiting
client: AGREEで条件受け入れ。gameステータスに移行
game
client: 対局
server: 対局終了で切断

拡張モード

CSAモードとの違い:

login
client: LOGIN username password x1で接続
server: ##[LOGIN] +OK x1 を送る。clientは connected ステータスへ
connected
client: %%GAMEコマンドでgamenameを指定すると、game_waitingステータスに移行
client:%%CHALLENGEコマンドで既に待っ ている人のいるgamenameを指定するとagree_waitingステータスに
game_waiting
server: gamename毎に先手後手が揃うと、対局条件表示.agree_waiting ステータスに
client: 取り消す場合は%%GAMEコマンドで connectedに戻ることが可能。
agree_waiting
client: AGREEで条件受け入れ。gameステータスに移行
game
client: 対局
server: 対局終了でconnectedステータスに移行

文法

username
LOGINの際にクライアントが名乗る文字列.A-z0-9@_-. だけが使える.文字数制限は未定.
gamename
対局のマッチングに使われる文字列.拡張モードでは%%GAMEコマンドでクライアントが指定する.CSAモー ドでは固定.書式はname-total_time-byoyomi_time
game_id
対局毎にサーバが指定する文字列.現在はgamenameとusernameと時刻を 組み合わせたもの.

拡張コマンド

拡張モードでのみ利用可能

%%WHO
クライアントの一覧が出力されます.
%%CHAT string
チャットします.拡張モードのクライアント全てに送信されます. 現在 utf-8 が de facto standard になっています. 空行を読みとばされます (keep-alive のためにクライアントから 空行を送って良い)
%%GAME gamename [+-*]
対局待ちになります.
%%CHALLENGE gamename [+-*]
対局をします。 %%GAMEと%%CHALLENGEの違いは、相手が見つから なかった場合に game_waitingに入るか否か. 対局相手が見つからない場合は(もともと相手が いなかったり、競合で負けた場合など)、 %%GAMEではエラーが表示されないが,%%CHALLLENGEの場合は、表示される。
%%LIST
game_idの一覧が出る。
##[LIST] b-1-a-20040626025755
##[LIST] +OK
%%SHOW game_id
盤面表示
%%SHOW b-1-a-20040626025755
##[SHOW] BEGIN Game_Summary
##[SHOW] Protocol_Version:1.0
##[SHOW] Protocol_Mode:Server
##[SHOW] Format:Shogi 1.0
##[SHOW] Game_ID:wdoor+yowai_gps-1500-0+test+yowai_gps+20041020235953
##[SHOW] Name+:test
##[SHOW] Name-:yowai_gps
##[SHOW] Rematch_On_Draw:NO
##[SHOW] To_Move:+
##[SHOW] BEGIN Time
##[SHOW] Time_Unit:1sec
##[SHOW] Total_Time:1500
##[SHOW] Byoyomi:0
##[SHOW] Least_Time_Per_Move:1
##[SHOW] Remaining_Time+:1488
##[SHOW] Remaining_Time-:1489
##[SHOW] Last_Move:-1213FU,T1
##[SHOW] Current_Turn:2
##[SHOW] END Time
##[SHOW] BEGIN Position
##[SHOW] Jishogi_Declaration:1.1
##[SHOW] P1-KY-KE-GI-KI-OU-KI-GI-KE *
##[SHOW] P2 * -HI *  *  *  *  * -KA *
##[SHOW] P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
##[SHOW] P4 *  *  *  *  *  *  *  *  *
##[SHOW] P5 *  *  *  *  *  *  *  *  *
##[SHOW] P6 *  *  *  *  *  *  * +NY *
##[SHOW] P7+FU+FU+FU+FU+FU+FU+FU * +FU
##[SHOW] P8 * +KA *  *  *  *  * +HI *
##[SHOW] P9+KY+KE+GI+KI+OU+KI+GI+KE *
##[SHOW] P+00KY
##[SHOW] P-00FU
##[SHOW] +
##[SHOW] END Position
##[SHOW] END Game_Summary
##[SHOW] +OK
%%MONITOR{ON,OFF}
指定した対局の観察を継続的に行う/解除する (サーバのRevision 1.15以降)
%%MONITOR2{ON,OFF}
指定した対局の観察を継続的に行う/解除する (差分バージョン)
%%RATING
サーバが管理するプレイヤーのレーティング一覧を表示します(サーバのRevision 1.47以降)
%%RATING
##[RATING] Gekisashi_Xeon-W5590_8c       1707 @2010-05-03
##[RATING] bonasse_980X          1620 @2010-07-07
##[RATING] Gekisashi_Xeon-X5365_8c       1578 @2010-05-01
##[RATING] Feliz_CSA     1569 @2010-05-03
##[RATING] test_td10k    1565 @2010-07-10
##[RATING] felizze980x6c         1554 @2010-05-22
##[RATING] bonasse_1090T_6c      1531 @2010-06-21
##[RATING] bonasse_980X          1501 @2010-05-14
##[RATING] Feliz_980X    1496 @2010-05-18
##[RATING] jushiro       1492 @2010-05-02
##[RATING] senoabs       1480 @2010-05-11
##[RATING] bonassen      1457 @2010-04-03
##[RATING] Shueso        1450 @2010-06-06
##[RATING] d01   1450 @2010-07-10
##[RATING] ponta_human   1446 @2010-07-02
##[RATING] Bona_Core_i5_750      1428 @2010-07-05
##[RATING] Bonanza_E5430_4c      1423 @2010-04-28
##[RATING] gps_4X8_1     1421 @2010-05-02
##[RATING] gps_4X8       1418 @2010-04-24
##[RATING] +OK
%%SETBUOY gamename moves [count]
[experimental] 指定局面戦を登録する。これにより、平手の初期局面から開始するのではなく、指定された途中局面から対戦することができる。
%%SETBUOY buoy_foo-1500-0 +7776FU-3334FU
##[SETBUOY] +OK

プレイヤへの対局条件提示の例:

%%GAME buoy_foo-1500-0 +
BEGIN Game_Summary
Protocol_Version:1.1
Protocol_Mode:Server
Format:Shogi 1.0
Declaration:Jishogi 1.1
Game_ID:hoge+buoy_foo-1500-0+daigo1+daigo2+20100904193853
Name+:daigo1
Name-:daigo2
Your_Turn:+
Rematch_On_Draw:NO
To_Move:+
BEGIN Time
Time_Unit:1sec
Total_Time:1500
Byoyomi:0
Least_Time_Per_Move:1
END Time
BEGIN Position
P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
P2 * -HI *  *  *  *  * -KA * 
P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
P4 *  *  *  *  *  *  *  *  * 
P5 *  *  *  *  *  *  *  *  * 
P6 *  *  *  *  *  *  *  *  * 
P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
P8 * +KA *  *  *  *  * +HI * 
P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
+
+7776FU,T1
-3334FU,T1
END Position
END Game_Summary
%%DELETEBUOY gamename
[experimental] 指定局面戦gamenameの登録を解除する。%%SETBUOYで指定されたcountは対局のたびに減っていくが、このコマンドにより、残数のあるgamenameを強制的に削除できる。
%%DELETEBUOY buoy_foo-1500-0
##[DELETEBUOY] +OK
// オーナーでないプレイヤが削除しようとした場合はエラー
%%DELETEBUOY buoy_foo-1500-0
##[ERROR] you are not allowed to delete a buoy game that you did not set: buoy_foo-1500-0
// 未登録のgamenameを削除しようとした場合はエラー
%%DELETEBUOY hoge
##[ERROR] buoy game not found: hoge
%%GETBUOYCOUNT gamename
[experimental] 指定局面戦gamenameの残数を表示する。
%%GETBUOYCOUNT buoy_foo-1500-0
##[GETBUOYCOUNT] 10
##[GETBUOYCOUNT] +OK
// 未登録のものは-1
%%GETBUOYCOUNT hoge
##[GETBUOYCOUNT] -1
##[GETBUOYCOUNT] +OK
%%FORK source_game_id [new_buoy_gamename] [nth-move]
[experimental] 対局の途中局面から別の対局を始める。「別の対局」は指定局面戦として登録されるので、その対戦方法の詳細は%%SETBUOYの項を参照。
source_game_id
現在進行中の対局をgame_idで指定。既に終了した対局には対応しない。
new_buoy_gamename
新しい対局のgamename。%%SETBUOYで用いる指定局面戦の命名規則に従わなければならない。省略された場合は、buoy_で始まるgamenameが自動生成される。
nth-move
現在進行中の対局の何手目の局面を指定局面とするか。手数は1から始ままり、nth-move手目が指し終わった状態が指定局面となる。省略された場合は、対局中の最終局面の1手前の局面が指定される。
例1
%%LIST        ← 対局中のgame_idを確認
%%FORK hoge+hoge-36000-120+p1+p2+20130225111829  ← buoy_hoge-36000-120という指定局面が登録される

例2
%%FORK hoge+hoge-36000-120+p1+p2+20130225111829 buoy_hoge-36000-120 15
 ← 15手目が指し終わった局面を指定

評価値と読筋を記録する拡張

  1. はじめに
  2. 拡張(1) CSA通信プロトコル(TCP/IP)の拡張
  3. 拡張(2) CSA棋譜ファイル形式の拡張
  4. 拡張(1)と拡張(2)の組み合わせ
  5. 実装:
  6. 問題点:
  7. 他の実装:
  8. 運用上の決め毎

プロジェクトの情報
$Date$