Diarkis Roomモジュールのご紹介
DiarkisのRoomモジュールを利用することで、仮想的に作成されたルームを共有して、リモートクライアント間でメッセージを交換できます。
またRoomモジュールは、ブロードキャストやメッセージ機能を通じてRPCコマンドを交換するためのRPCブローカーとしても機能します。
Roomモジュールのセットアップ
Roomモジュールを利用するためには、ネットワーククライアントインスタンスを渡す必要があります。
以降で、Diarkis C#クライアントによるRoomモジュールの使い方を解説します。
なおRoomモジュールは、使用できる通信プロトコル(TCP/UDP/RUDP)に制限はありません。
UDPクライアントを使用する
TCPクライアントを使用する
Roomの作り方
Roomモジュールは、メンバー数上限を指定することができます。
以下の例では、メンバー上限を10としてRoomを作成します。
Roomに参加する方法
Room作成時に取得したRoom IDを外部に保存したものか、マッチメイキング機能を使用してRoom IDを共有することで、Roomに参加することができます。
Roomに参加すると、参加したクライアントではOnJoinが発火し、Roomに参加している他のメンバーのクライアントではOnMemberJoin(後述)が発火します。
Roomに参加する際には、先述の通りすでに参加しているリモートクライアントで通知メソッドが発火しますので、誰が参加したかなどに応じた処理を行いたい場合はmessageに識別情報などを含めることを推奨します。
UDPクライアントが使用されている場合でも、この処理ではRUDPメッセージとして送信されます。
新たに参加したメンバーを検知する
Roomに新たなメンバーが参加すると、OnMemberJoinイベントが発火します。
以下は、発火したイベントを処理する例です。
Roomからの退出方法
Roomから退出(room.Leave)すると、クライアントではOnLeaveが発火し、Roomに参加中の他のメンバーのリモートクライアントではOnMemberLeaveが発火します。
他のメンバーは、誰がRoomを退出したかに応じた処理を行いたい場合は、messageに識別情報などを含めることを推奨します。
UDPクライアントが使用されている場合でも、この処理ではRUDPメッセージとして送信されます。
退出したメンバーを検知する
Roomに参加中のメンバーが退出したときには、OnMemberLeaveイベントが発火します。
以下は、発火したイベントを処理する例です。
ランダムにRoom参加したり、Roomが空いていない場合に新たなRoomを作成する
単にクライアントがランダムにRoomに参加したり、Roomを作成したりしたい場合は、このメソッドを使います。このメソッドで発生するイベントは、OnJoin/OnMemberJoinまたはOnCreateと同じです。 UDPクライアントを使用している場合、メッセージはRUDPとして送信されます。
Roomの全メンバーにメッセージをブロードキャストする方法
ブロードキャストメソッドは、自分を含むルームの全メンバーにメッセージを送信します。このメッセージはOnMemberBroadcastによって受信されます。メッセージには送信者のユーザーIDなどを含めることをお勧めします。これにより、受信者は誰がメッセージを送信したかを検知し、それに応じた行動をとることができます。
ブロードキャストメッセージの受信方法
他のメンバーがブロードキャストメッセージを送信すると、OnMemberBroadcastイベントが発生します。以下に、このイベントの処理方法の例を示します。
Roomの特定のメンバーにメッセージを送信する方法
Roomの全メンバーではなく、選択したメンバーにメッセージを送信することができます。このメッセージはOnMemberMessageによって配信されます。メッセージには送信者のユーザーIDなどを含めることをお勧めします。これにより、受信者は誰がメッセージを送信したかを検知し、それに応じた行動をとることができます。
Roomのプロパティを取得する方法
プロパティ名を指定することで、自分がいるRoomのプロパティを取得することができます。取得したプロパティを読み出すには、OnGetPropertiesをリッスンする必要があります。すべてのプロパティはバイト配列です。 UDPクライアントを使用した場合、メッセージはRUDPとして送信されます。
Roomのプロパティを更新する方法
自分がいるRoomのプロパティを更新することができます。すべてのプロパティ値はバイト配列でなければなりません。UpdatePropertiesをコールすると、OnUpdatePropertiesが発生します。 UDPクライアントを使用している場合、メッセージはRUDPとして送信されます。
Roomの数値プロパティを同期させる方法
Roomのプロパティを使用することで、数値プロパティを共有・同期することができます。
以下の例では、数値化されたRoomプロパティを参加メンバー間で管理・同期する方法を説明します。
Roomの数値プロパティを同期させる設定
以下の例では、イベントリスナーを設定して、数値プロパティ値をRoomの全メンバーに同期させる方法を説明しています。
Roomの数値プロパティを初期化する方法
通常、Roomを作成したユーザークライアントは、数値プロパティを初期化します。
Roomの数値プロパティを同期的に更新する方法
Roomの数値プロパティをインクリメントまたはデクリメントし、Roomの他のメンバーと自動同期させることができます。
Roomの数値プロパティを新規メンバーに同期させる方法
新しいメンバーがRoomに参加するときには、そのクライアントは、数値プロパティの現在の値を取得する必要があります。
他のメンバーのIDとオーナーのIDを取得する方法
オーナーIDとともに、メンバーIDの一覧を取得することができます。
おわりに
Roomの概念は、リアルタイムアプリケーションの最も基本的な概念の1つです。
DiarkisのRoomモジュールは、非常に柔軟性が高く、様々な操作に対応できるため、アプリケーション開発者はより「実現したいこと」に集中して実装することができるようになります。