じゃんけんプロトコル ver. 0.2.5 1. 概要 じゃんけんプロトコルは,1台の「じゃんけんサーバ」と複数台の 「じゃんけんクライアント」間でやりとりするプロトコルで,この プロトコルの目的は複数の「じゃんけんクライアント」の中から, 1台の勝者をじゃんけんのルールで決定することにある. クライアントサーバモデルで考えると,クライアントが「じゃんけん サーバ」で,サーバは「じゃんけんクライアント」になる. 勝敗は「じゃんけんサーバ」が計算し,「じゃんけんクライアント」に 通知する.本プロトコルは,「じゃんけんサーバ」と「じゃんけん クライアント」が同一セグメントにある場合を想定しており,通知は UDPを使ったブロードキャストで行う. 2. 記法 本文章において,[しなければならない]は,必ず必要な機能を表す. [すべきである]は,必要ではないが,実現することが望ましい機能を表す. [してもよい]は,必要ではないが,実現して問題のない機能を表す. 3. じゃんけんサーバ 3.1. 状態遷移 START <---+ \|/ | +-----> CALL | | \|/ | | OPEN | | | | +----------+---------+ 一人勝ちで 一人勝ち はない場合 の場合 3.2. 状態 "START" 「じゃんけんサーバ」は,状態"START"において,「じゃんけんクライアント」 からアクセスを受ける.このアクセスによって,「じゃんけんサーバ」は 「じゃんけんクライアント」のIPアドレスと,アクセスするポート番号を 把握する.使用するプロトコルはTCPを使わ[なければならない].「じゃんけん サーバ」が使用するポート番号として2003を使用[してもよい]. 「じゃんけんクライアント」は「じゃんけんサーバ」に対して \A(?:([^:]+):)?(\d+)\r\n\Z のデータを送る.ここで[^:]+は「じゃんけんクライアント」のホスト名または IPアドレス,\d+は,「じゃんけんクライアント」がサーバとして 動作する際のポート番号である.状態"START"から状態"CALL"への遷移は 「じゃんけんサーバ」を使用するユーザの意図に依存する[べきである]. データ送信後「じゃんけんクライアント」は「じゃんけんサーバ」との接続を 切断する[べきである]. 3.3. 状態 "CALL" 「じゃんけんサーバ」は,状態"CALL"において「じゃんけんクライアント」 に手の問い合わせを行う.「じゃんけんサーバ」から「じゃんけんクライ アント」への問い合わせは CALL\r\n で[なければならない].このアクセスがあると,「じゃんけんクライアント」 は「じゃんけんサーバ」に対して, PAPER\r\n <= パーでんねん SCISSORS\r\n <= チョキでんねん ROCK\r\n <= グーでんねん のいずれかを手として「じゃんけんサーバ」に返さ[なければならない]. 問い合わせと応答で,ひとつのセションが終了[しなければならない]. 「じゃんけんサーバ」と「じゃんけんクライアント」間のセッションには TCPを使わ[なければならない].セッション終了後,TCPの接続は切断し[なけれ ばならない]. 「じゃんけんサーバ」に登録してある「じゃんけんクライアント」すべて から手データを取得すると,「じゃんけんサーバ」は状態"OPEN"に移る. 3.4. 状態 "OPEN" 「じゃんけんサーバ」は状態"CALL"において「じゃんけんクライアント」から 取得した手データを元に,じゃんけんクライアントの勝敗を決定する. 「じゃんけんサーバ」は「じゃんけんクライアント」に対して,勝敗情報を 通知[すべきである].通知はUDPを使ったユニキャストで行う. 勝敗情報としては,対象とする「じゃんけんクライアント」が唯一勝っている 場合には 100(?:\s\C+)?\r\n を,他のクライアントも勝っている場合には, 110(?:\s\C+)?\r\n を,負けているのであれば, 120(?:\s\C+)?\r\n あいこであれば, 130(?:\s\C+)?\r\r を通知[すべきである].使用するプロトコルはUDPを使う[べきである]. ポート番号として「じゃんけんクライアント」が状態"START"で通知した ポート番号を使っ[てもよい].通知メッセージでオプションとなって いる \C+ はutf-8で記述してあるメッセージである. 「じゃんけんサーバ」は通知が終了し,かつ「じゃんけんクライアント」に勝ち が2人以上いる場合には,勝者を対象として,"CALL"状態から繰り返す. 勝者がただ一人である場合には,勝者をオペレータに対して出力[すべきである]. 勝者を出力後,「じゃんけんサーバ」は動作を終了[してもよい]. ------------------------------------------------------------------