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 チャンネルで、複数のクライアントが同じチャンネルにブロードキャストできます。
最終更新
役に立ちましたか?

