Gammonゲーム台のAPI

Back

これはゲームがトークンを受け取ったりするためにアーケードと通信するためのAPIです。

コイン受けAPI

コイン=トークン=支払い=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": { ... } } }

支払いが始まる多目的リクエストです。

  1. すでに起動していない場合カードリーダーのトークン受けを起動させます。

  2. トークンはまだ受けていなかったら空っぽのリスポンすします。

  3. リーダーがトークンを受けたらそのトークンそのトークンを予約します。

  4. リスポンスに予約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 }