仕上げとしてクライアント サーバー通信の処理をおこないます。これでランキングを偽装できないWebアプリの完成です。

CrashRollerHubクラスを定義する

PagesフォルダのなかにCrashRoller.cshtml.csという名前のファイルを作成して以下のように書きます。

Pages\CrashRoller.cshtml.cs

インデントが深くなるので以降は名前空間を省略して書きます。

フィールド変数ですが、ConnectionIDをつかって対応するGameオブジェクトを取得できるようにしておきます。

接続成功時の処理

接続に成功したときの処理を示します。

接続に成功したらクライアントにこれを伝えます。そしてGameオブジェクトを生成してリストに追加します。

切断されたときの処理

接続が切断されたときの処理を示します。辞書からGameオブジェクトを削除するとともにGameオブジェクト内でタイマーイベントが発生してもなにも起きないようにイベントハンドラを削除します。イベントハンドラの削除はGameクラスのDestroyGameメソッド内でおこなわれます。

キーが押されたり離されたりしたら、それをGameオブジェクトで処理させます。

クライアントサイドのイベントをサーバーサイドに送る

クライアントサイドでゲームスタートの処理がおこなわれたらGameクラスのGameStartメソッドを呼び出します。またこれによってゲームスタートの処理がサーバサイドで正常におこなわれたときはこれをクライアントサイドに通知します。

サーバーサイドのデータをクライアントサイドに通知する

Gameオブジェクトのなかではタイマーによりイベントが発生します。イベントが発生したらその都度Gameオブジェクト内のデータを取得してクライアントサイドに通知します。

敵を倒したりミスをしたりゲームオーバーになったときは、これをクライアントサイドに通知します。

ステージクリア時とじっさいに新しいステージに移動したときも、これをクライアントサイドに通知します。

ランキングへの登録

ゲームオーバーになったらそのときのスコアとランキングを比較して必要ならランキングにプレイヤー名とスコア、時刻を登録します。以下はプレイヤー名とスコア、時刻を扱うためのクラスです。

ゲームオーバーに伴いクライアントサイドからデータが送られてきたらランキングに反映させます。現在のランキングにクライアントサイドから送られてきたデータを追加してスコアでソートします。上位から30位までを取得してテキストファイルとして保存します。

それから実際にクライアント サーバー通信の処理ができるようにするにはProgram.csの最後のほう、app.Run();の直前あたりに以下を記述しなければなりません。

スコアランキングを表示させる

あとはこのファイルを読み取って内容を表示できるようにすれば完成です。

新しいページCrashRollerHiscoreを作成します。

Pages\CrashRollerHiscore.cshtml