これはゲームがトークンを受け取ったりするためにアーケードと通信するためのAPIです。
HTTP(Sなし)のAPIです。アドレスはhttp://127.0.0.1:42243
すべてのリクエストはPOST
でボディはJSONです。返事のボディもJSONです。
今のところはエラーのリスポンスはないです。問題がある場合僕はログで確認できます。開発のあと普通の動作中エラーが発生しないことと思って大丈夫です。
リスポンスに新開発やテストなどのために説明していない追加のプロパティある可能性はあります。無視してください。
コイン=トークン=支払い=payment
支払いは全部NFCカードで実物のコインやトークンはないですけどそのような目的のAPIです。
--- title: マルチプレイ --- flowchart TD player_select{プレヤー数0} -->|スタートを押して| ask_payment[ask_paymentを送る] ask_payment -->|支払いを受けた| countdown ask_payment --> wait_payment[支払い待ち] wait_payment -->|0.1s経った| ask_payment wait_payment -->|スタートを押して| player_select countdown -->|カウントダウン終わり| commit_payment[commit_paymentを送る] countdown[カウントダウンスタート] -->|スタートを押して| release_payment[release_paymentを送る] release_payment --> player_select commit_payment --> start_game{ゲームスタート}
{"v1": { "ask_payment": { ... } } }
支払いが始まる多目的リクエストです。
すでに起動していない場合カードリーダーのトークン受けを起動させます。
トークンはまだ受けていなかったら空っぽのリスポンすします。
リーダーがトークンを受けたらそのトークンそのトークンを予約します。
リスポンスに予約IDを送ります。
普通はトークン受けるまで定期的にこのリクエストを送ります(一秒に数回でも大丈夫です)。
初めてのリクエストのリスポンスにトークンが無い可能さえいは高いです。最初のリクエストはカードリーダーの起動だけの役に立ちます。
トークン入らなくなった時リクエスト送ることをやめるとリーダーが再シャットダウンします。
{ "v1": { "ask_payment": { "client_payment_id": { "game_id": "my_game", "id": "payment123" } } } }
client_payment_id
はトークンに関連付けます。支払いしてから同じclient_payment_id
でリクエストを送ったら二度と支払いされないです(idempotency
key)。2つの部分あります:うちと協力するとき決めるゲームのIDとゲームがスキに作るユニークなストリング。UUIDでもタイムスタンプでもOKです。次の支払いに新しいclient_payment_id
を使います。
同時に複数にトークを受けられないです。トークンを受ける前に違うclient_payment_id
を遅れば前のclient_payment_id
は受け換えられます。
{ "ok": { "payment": null } }
{ "ok": { "payment": { "client_payment_id": { "game_id": "my_game", "id": "payment123" } } } }
client_payment_id
はリクエストに送ったのと同じです.
{"v1": { "release_payment": { ... } } }
以前に予約されたトークンを開放します。例えば、ゲームスタート前にプレヤー一人が徹底したい場合。これは任意ですけどプレヤーができればより良いプレヤー体験になるかもしれません。
{ "v1": { "release_payment": { "client_payment_id": { "game_id": "my_game", "id": "payment123" } } } }
{ "ok": null }
{"v1": { "commit_clear_payments": { ... } } }
プレヤーセレクトが終わったら予約した支払いをしたためます。IDが失われた支払いは削除されます。
{ "v1": { "commit_clear_payments": { "commit_payment_ids": [ { "game_id": "my_game", "id": "payment123" } ] } } }
{ "ok": null }