はじめのページ。メールアドレス
, パスワード
を入力してユーザー作成 or ログインでログイン
EmailInput
, PasswordInput
を Firebase Auth
にわたす。返却された credential
の uid
をユーザーIDとする。
ユーザーデータは Firestore
に保存。(v1では実装しない)
ログイン後に遷移するページ。ユーザー情報とランダムマッチを行うボタンがある。
Firestore
からのユーザー情報を表示(v1では実装しない)。
"ランダムマッチ" ボタン
を押すと gRPCのAPI WordWar.Game(uid)
が呼ばれ、ゲーム終了時まで継続する Server Streaming
がはられる。
サーバー側では部屋にマッチング(v1では1部屋4人)し、RedisのKVS?を作る。
クライアント側はゲーム画面に遷移する。
[疑問]: マッチングした相手のユーザー情報は GameResponse
にはいっていないのか
マッチングが完了すると遷移するページ。60秒間?の間対戦が行われる。(v1では10回発言されたら終わり)
入力フォームはひらがなのみ可。入力されると gRPCのAPI WordWar.Say(uid, message)
が呼ばれ, 発言した内容がResponseとして返ってくる。(v1ではしりとりとして有効かどうかを判定しない)
サーバー側では発言内容がRedis KVS に書き込まれ、Pub/Sub によってルームメンバーに周知される。(全員にGameResponseを送る?)
ゲーム終了時、WordWar.Game
ストリームが切断され、結果画面に遷移する。
結果画面。ゲームの結果を表示する。
gRPCのAPI WordWar.Result(uid)
が呼ばれ、サーバー側ではuidから対戦のスコアを返却する。この際スコアに応じてレーティングが変動する(v1では未実装)。
戻るボタンでホーム画面に遷移。
コミュニケーションはSlack上で, タスク管理はAsanaでやりたい。 1スプリント1週間とし、機能提案から実装、リリースのサイクルを作りたい。
比較的シンプルめのSPAということで以下を参考にしています。 elm-my-spa
認証の部分とホスティングとユーザーデータの保存はFirebaseにより行います。 Firebaseコンソール
CSSフレームワークとして Bulma を用いています。 公式ドキュメントにはHTMLによる例が載っているのでそれを参考に画面を作ってください。なお、HTMLからElmへの変換ツールとして HTML to ElmというVSCodeの拡張機能を利用することを推奨します。