3. カスタムコマンドを実装する
はじめに
続いて Diarkis のカスタマイズ性を体験するために、カスタムコマンドを実装してみましょう。
本チュートリアルでは以下のようなコマンドを実装します。
Room の敵に攻撃するコマンド
コマンドバージョン: 2 (0, 1 はビルトインコマンドで利用されています)
コマンド ID: 300
リクエスト: 攻撃タイプ (type) を指定してコマンドを送信 (1: 近接、2:遠距離)
レスポンス: 誰がダメージを与えたか、ダメージ値と合計ダメージ値を返却
ルームメンバー全員に push 通知
実装の流れは以下を想定しています。
puffer (Diarkis が提供するデータシリアライザ) を使ってペイロードを生成するためのコードを出
サーバーにカスタムコマンドを実装
テストクライアントにコマンドを実装
Puffer モジュール(Diarkis が提供する データシリアライザ)
Puffer は JSON からデータをシリアライズ、デシリアライズするためのコードを生成するツールです。
出力先は C++、C#、Go に対応しているため、Unreal や Unity で開発するクライアントと、Go で開発するサーバーとのパケットデータに関する実装を簡略化できます。
Puffer の詳細については API リファレンスをご確認ください。
https://docs.diarkis.io/docs/server/v1.0.0/diarkis/puffer/index.html
カスタムコマンドのデータ定義用 JSON ファイルの作成
💾 ./puffer/json_definitions/custom/attack.json を追加します。
attack はカスタムコマンドのリクエストに利用するデータです。
type: 攻撃タイプを uint8 型で格納できます
attackResult はレスポンス、ルームメンバーへの push 通知に使うデータです。
type: 攻撃タイプを uint8 型で格納できます
uid: 誰がダメージを与えたか。 string 型
damage: ダメージ値。 uint16 型
totalDamage: 合計ダメージ値。 uint16 型
コード生成
以下のコマンドを実行して、コードを生成します。puffer 以下の各言語のディレクトリにコードが出力されます。
サーバーに attack コマンドハンドラを実装する
サーバーに attack コマンドを実装しましょう。
💾 ./cmds/custom/attack.go を追加します。
コード内のコメントにて、どんなことを実装しているか記載していますので、合わせてお読みください。
attack コマンドを公開する
コマンドを実装したら、外部に公開する必要があります。
💾 ./cmds/custom/main.go を編集し、以下を追加します。
Expose() に対して、 diarkisexec.SetServerCommandHandler() を追加して、attack コマンドを公開します。
テストクライアントに attack コマンドを追加する
サーバーの attack コマンドを実行するためにテストクライアントに attack コマンドを追加します。
💾 ./testcli/handson/attack.go を追加します。
クライアントを実行するための setup の他、サーバーにコマンドを送信する Attack() 、レスポンスをハンドリングする onResponse()、push通知をハンドリングする onPush() を実装しています。
テストクライアントに handson attack コマンドを登録します。
💾 ./testcli/main.go を編集します。
cli.RegisterCommands(string, []cli.Command) でテストクライアントに新しいコマンドを登録できます。
バイナリを生成し、udp サーバーを再起動する
再度 make build-local を実行してバイナリを生成します。
サーバーとテストクライアントが更新されます。
エラーが無いことが確認できたら、一度 udp サーバーを停止して、再起動してください。
attack コマンドの動作確認
room create room join した後に handson attack コマンドを発行し、ダメージが加算されることを確認してください。
uid: test1 で handson attack を実行
uid: test2 で attack 結果の push 通知を受信
最終更新
役に立ちましたか?

