A · 獲得済み
構造refresh
獲得リクエスト(A)に対する成功レスポンスです。 tokenは発行のたびに増加するフェンシングトークン (u64、ビッグエンディアン)で、ownerはリクエストに載せた値をそのまま返したものです — どの獲得試行に対する応答なのかを正確に特定するための相関子です (応答マッチングルール)。
op直後に16バイトの固定ヘッダーが続きます。この16バイトはバイナリであるため0x0A(\n)を 含みうるので、クライアントは必ず先にバイト数で読み取ってから改行を探す必要があります。
バイト表記:
opはASCII文字、token・ownerはバイナリ(u64、ビッグエンディアン)、keyは UTF-8テキスト(可変長、構造上はNと表記)です。末尾の\nは0Aです。
フロー
クライアント
サーバー
A · 獲得 (key · owner)
キーは未使用 → 即座に発行
A · 獲得済み (token = n · ownerをエコー)
使用中 → 保有者の解放または失効を待つ
順番が来たら → A · 獲得済み (token = n+1)
リクエストレスポンス
発行に至る経路は2通りありますが、フレームはどちらも同じです — 即座に発行された場合でも 待機後に発行された場合でも、届くAにはその瞬間の新しい フェンシングトークンが入っており、トークンは 常に増加し続けます。待機中にwaitを超えた場合は、この応答の代わりに タイムアウト Tが届きます。