Tutorial 5 - Direct Message

このチュートリアルでは、Diarkis の Direct Message (DM) 機能を実装します。DM は UID を指定して特定のクライアントへサーバー経由で 1 対 1 メッセージを届けます。

終了時には以下のことが身についています:

  • DirectMessage.Send() で特定 UID へ DM を送信する方法

  • OnDMMessage で受信コールバックを登録する方法

  • DiarkisDirectMessageEventArgs から送信者 UID とペイロードを取得する方法

  • OnDMMessageResponse で配信確認(Ack)を受け取る方法(省略可)

Tutorial 1 の接続フローが前提です。このシーンは Start() で自動接続します。

Direct Message とは

Room のブロードキャストはルーム内の全員(自分を除く)に届きます。DM は UID を明示的に指定した 1 クライアントにだけ届きます。相手がルームに参加しているかどうかは関係ありません。

メソッド
宛先
用途例

SendBroadcastToRoom

ルーム内の全員(自分を除く)

ゲーム状態の同期

DirectMessage.Send

指定した 1 クライアント

フレンドへのチャット、プライベート通知

DM は P2P ではなくサーバー経由です。送信先の UID さえわかれば、同じルームに参加していなくても送信できます。

シーンのセットアップ

Tutorials/Scenes/Tutorial5-DirectMessage.unity を開き、定数を環境に合わせて変更してください。

Play モードに入るとシーンが自動接続します。一方のクライアントの My UID をコピーし、もう一方の Target UID フィールドに貼り付けてメッセージボタンを押してください。

コードの解説

イベントの登録

OnDMMessage を登録するだけで、自分の UID 宛に送られたすべての DM を受け取れます。

イベント
発火タイミング
コールバックシグネチャ

OnDMMessage

自分の UID 宛の DM が届いた

Action<DiarkisDirectMessageEventArgs>

OnDMMessageResponse

送信した DM がサーバーに到達した(省略可)

Action<DiarkisDMResponseEventArgs>

DM の送信

ペイロードは任意のバイト列です。ここでは UTF-8 エンコードしたテキストを送っていますが、MessagePack や JSON などで構造化しても構いません。

DM の受信

GetPayload()DiarkisByteVector を返します。インデックスアクセスで byte[] に変換してから UTF-8 デコードします。このパターンは Tutorial 4 の OnRoomMemberBroadcast と同じです。

配信確認(省略可)

サーバーへの到達確認が必要な場合に使います。多くのユースケースでは不要です。

メッセージフロー

次のステップ

Tutorial 6 では Group を学びます — 文字列 ID で識別される軽量な pub/sub チャンネルで、複数のクライアントが同じチャンネルにブロードキャストできます。

最終更新

役に立ちましたか?