これはゲームがトークンを受け取ったりするためにアーケードと通信するためのAPIです。
HTTP(Sなし)のAPIです。アドレスはhttp://127.0.0.1:42243
すべてのリクエストはPOSTでボディはJSONです。返事のボディもJSONです。
今のところはエラーのリスポンスはないです。問題がある場合僕はログで確認できます。開発のあと普通の動作中エラーが発生しないことと思って大丈夫です。
リスポンスに新開発やテストなどのために説明していない追加のプロパティある可能性はあります。無視してください。
コイン=トークン=支払い=payment
支払いは全部NFCカードで実物のコインやトークンはないですけどそのような目的のAPIです。
---
title: シングルプレイ
---
flowchart TD
ask_payment -->|支払いを受けた| commit_payment[commit_paymentを送る]
ask_payment --> wait_payment[支払い待ち]
wait_payment -->|0.1s経った| ask_payment
commit_payment --> start_game{ゲームスタート}
---
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 }