<> 1. 基本フォーマット 通信の単位となるレコードは「行」である。行の終了は改行コード(CR + LF)で表される。ただし、改行コードの部分は必ずしも正しいコードを送っ てくるわけではないことが分かっているので注意。 行: <文字列> 行を単位として、以下の 2 種の形式のどちらかに従った文字列が送られて くる。 (1) <識別コード> <文字列> (2) <文字列> クライアントは (1) だけ真面目に処理して (2) はたれ流しでもなんとか なると思われる。 2. 状態遷移 NNGS クライアントは、状態遷移を指示する行を受信した場合、それ以降の 行の解釈は指示された状態で行う必要がある。たとえば、複数の対局を観 戦している際に、着手を意味する行だけを送信しても、どのゲームに対す る着手か判別できない。そのため、着手の送信に先立ってゲームを指定す る行が送信される。 例 1) 15 Game 1 I: foo (0 894 -1) vs bar (2 884 -1) 15 4(B): C3 この例では 2 行めの着手に先行してゲームを特定するための行が送 られている。クライアントは 1 行目を受け取った直後に、ゲーム番 号 1 の処理状態に遷移しなければならない。 例 2) 25 File foo [1k*](W) : bar [1k*](B) H 0 K 5.5 19x19 W+Resign 26-00-34 R foo [1k*](W) : bar [1k*](B) H 0 K 5.5 19x19 B+Resign 26-01-24 R foo [1k*](W) : bar [1k*](B) H 0 K 5.5 19x19 W+Resign 26-02-14 R 25 File この例では、ファイルの送信状態に遷移する行のあと、ファイルの内 容を順次表示し、ファイルの送信状態から通常状態に復帰する行が送 られている。 正しく状態遷移しないと、泣きをみることになるだろう。ていうか、なった。 3. 識別コード 識別コードは0から51までの整数を表すASCII文字列で、定義は以下の通り。 コード番号 関連コマンド 定義 0 不明(未使用?) 1 プロンプト 2 警告音(beep)の要求 3 碁盤描画の開始 4 (計画的な)サーバダウンの通知 5 エラーレポート 6 ファイル送信(未使用) 7 games ゲームリスト送信 8 help ヘルプファイル送信 9 一般情報 10 last Last コマンドの結果送信 11 kibitz 茶々 12 load ゲームのロード 13 Look メッセージ(謎) 14 message message のリスト(message コマンドによるもの) 15 move 着手の通知 16 observe 観戦中のゲームに関する情報 17 refresh 碁盤の再描画開始 18 save 保存されているゲームの一覧送信 19 say say の表示 20 done 地の計算結果のレポート 21 shout shout の表示 22 status 現在の盤面 23 保留されているゲーム(未使用) 24 tell tell の表示 25 results 対局結果の表示 26 time 残り時間の確認 27 who who コマンドの結果表示 28 undo 待ったの通知 29 show 場内アナウンス(管理者用) 30 翻訳情報 31 未使用 32 yell チャンネルでの発言 33 teach 指導碁(未使用?) 34 sgf SGF ファイルの送信 35 自動対局のアナウンス(?) 36 自動対局の受諾(?) 37 TicTacToe(三目並べの開始) 38 ゲームの選択(三目並べ、碁、将棋など) 39 version サーバのバージョン情報 40 . . による発言(?) 41 クライアント確認 42 user user コマンドの結果表示 43 sgf sgf コマンドの結果表示 44 The reregister reg log.(?) 45 A follow pl messages.(?) 46 igs プレイヤーのリスト 47 抜きの通知 48 adjourn 打ち掛けの確認 49 remove 死石の取り上げ 50 着手のエラー 51 say 複数の対局を行っている際の、say の識別 4. 識別コードごとの詳細 '\'は行が継続するという意味。 4.1 プロンプト コマンドの入力待ちを示す行。1 に続く番号で現在のプレイヤーの状態を 知ることができる。 形式: 1 Num: 0 ... ログオン状態(ユーザー ID 入力) Num: 1 ... パスワード送信待ち状態 Num: 2 ... 新規パスワード入力状態 Num: 3 ... パスワード検証状態 Num: 4 ... 新規アカウント作成状態 Num: 5 ... 対局待ち状態(平常状態) Num: 6 ... 対局中 Num: 7 ... 終局処理中 Num: 8 ... 観戦中 Num: 9 ... 指導碁中(NNGS 未サポート?) Num: 10 ... 対局終了 4.2 警告音(beep)の要求 警告音を鳴らすべき場面で送られてくる行。 0x07 は一般的な telnet でのビープコードである。 形式: 2 2 Beep: '\x07' 4.3 碁盤描画の開始 謎。IGS の仕様にはあるらしい。が、nngs のソースコードでは未定義。 形式: 3 B W B W...:" 4.4 (計画的な)サーバダウンの通知 サーバをシャットダウンする場合の警告に使われる。 これを食らったら直ちに対局を adjourn しろと言うことか? 形式: 4 4.5 エラーレポート 直前のコマンドに対するエラーの報告。続く文字列がエラーの詳細を示す が、人間向けなのでクライアントで処理するのはつらい(日本語化されて たりするし)。黙って Str を表示するしかない。エラーの内容にしたがっ て、賢い処理をするのは無理か? 形式: 5 Str: Sorry. Str: {WRONGPASS message} Str: Observing too many, limit is "" games. Str: You cannot observe while playing. Str: There is a dispute regarding your match: Str: Illegal move. Str: It is not your turn (while removing). Str: It isn't your turn Str: It isn't your turn. To resign, please use the 'resign' command. Str: To resign, please use the 'resign command. Str: You cannot change into a free game Str: You aren't playing a game. Str: You are not playing. Str: The other player is not on currently Str: Game failed to load. Str: You are not open for matches. str: Setting you open for matches. Str: You cannot remove a liberty. Str: You cannot remove Liberties Str: Channel must be Str: Title set. Str: %s: Unknown command. Str: No longer reviewing Str: Could not find game Str: Gmae not found Str: There are no more moves Str: This teach game is not a req... Str: User is not accepting tells. Str: Neither a review file Str: %s wants a もっとたくさんあるでしょう・・・。 4.6 ファイル送信(未使用) ファイル送信の開始および終了を示す。ただし、ファイル送信として扱わ れるコマンド(help など) には専用の行が用意されているので、これ自体 は未使用らしい。だが、nngs のソースコード中では定義されている。よ くわからん。 4.7 ゲームリスト送信 現在行われているゲームの一覧送信。プロンプトが現れた時点で一覧送信 は終了したものと見なされる。 形式: 7 [] [] vs. [] \ ( ) n_game: ゲーム番号 b_name: 黒番プレイヤ名 b_rank: 黒番ランク(1k* などの文字列) w_name: 白番プレイヤ名 w_rank: 白番ランク move: 現在までの着手数 size: 盤の路数 handi: 置き石 komi: コミ BY: 秒読み時間 FR: 対局の種類 詳しくは help games を参照。 4.8 ヘルプファイル送信 ヘルプファイルの送信の開始と終了を示す。この行が現れてから、次に現 れるまでがヘルプファイルの内容。 形式: 8 File 4.9 一般情報 ユーザに対する情報はすべてこの行で伝えられる。この内容をパースでき れば、高度な処理ができるが、適切に処理するのはかなり大変。真に欲し い情報だけ拾ってあとはたれ流すしかなさげ。 形式: 9 Str: 多すぎてリストしきれん。 4.10 Last コマンドの結果送信 last コマンドの結果送信の始まりと終わりを示す。扱い的には help と 同じ。 形式: 10 File 4.11 茶々 kibitz コマンドによる茶々の表示。 形式: 11 **: name: 発言者の名前 str: 発言内容 4.12 ゲームのロード 中断していたゲームの再開に関るものらしいが、詳細不明。ないとこま るだろう。要調査。 形式: 12 B W B W...: 4.13 メッセージ(謎) 不明。nngs のソースコード中では定義されている。要調査。 形式: 不明 4.14 message のリスト(message コマンドによるもの) messge コマンドによるメッセージがあることを示す。詳細不明。 形式: 14 You have messages. 4.15 着手の通知 着手の発生を通知する。自分の着手、相手の着手、観戦中の着手など全 てこれで送られる。形式1, 形式2 の順に送られてくるので、形式1 でど のゲームに対する着手か判断する。 形式1: 15 Game : ( ) vs \ ( ) g_num: ゲーム番号 type: ゲームの種類(?) w_name: 白番プレイヤ名 w_num: 不明 w_time: 白番残り時間[秒] w_remain: 白番残り手数 b_name: 黒番プレイヤ名 b_num: 不明 b_time: 黒番残り時間[秒] b_remain: 黒番残り手数 形式2: 15 (): Num: 着手番号 color: B ... 黒 W ... 白 pos: 地点(A1, B2 等) 形式3: 15 B W B W...: 不明。ペア碁? 4.16 観戦中のゲームに関する情報 不明。ペア碁用? 形式: 15 B W B W...: 4.17 碁盤の再描画開始 不明。ペア碁用? 形式: 15 B W B W...: 4.18 保存されているゲームの一覧送信 adjourn で中断されたゲームの一覧送信?詳細不明 形式1: 18 name: プレイヤ名 形式2: 18 Found stored games. num: 中断中のゲーム数 4.19 say の表示 4.20 地の計算結果のレポート 4.21 shout の表示 4.22 現在の盤面 現在の盤面の送信。対局者の情報、および盤面の状態が送られてくる。 ただし、着手に関する情報は送られてこないので、moves コマンドで別 途受信しなくてはならない。 形式1: 22