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モジュールは、非常に柔軟性が高く、様々な操作に対応できるため、アプリケーション開発者はより「実現したいこと」に集中して実装することができるようになります。