株式会社Diarkis

トップ > 技術ブログ > Diarkisを使ってRPCを実装する

Diarkisを使ってRPCを実装する

こちらの記事はバージョンの古いものを基にしています。

最新はこちら

Diarkisのルームモジュールを使うことでRPC(Remote Procedure Call)を実装することができます。ここではその実装方法を説明します。

ルームモジュールをRPCのメッセージブローカーとして使うことで、同じルームに参加しているクライアント同士でRPCを実行することが可能です。

リモートクライアントからRPCの実行命令を送信する

特定の同じルームのメンバーのクライアントに対してRPCを送信することで、対象のクライアントに対してRCPを実行することが可能です。

NOTE: msgData は例の中で使われているだけでクライアントSDKには含まれていません。

RPC送信実装例:

msgData.Type = MSG_TYPE_RPC; // This tells the receiver it is an RPC
msgData.ID = 100; // This is the RPC ID to be executed
msgData.Parameters = parameterList;
List<string> remoteClis = new List<string>();
remoteClis.Add(otherMemberUserID);
bool reliable = true;
// Send the RPC to one remote client in a room
room.MessageTo(room.GetRoomID(), remoteClis, msgData.Encode(), reliable);

リモートクライアントから複数のクライアンに対してRPCの実行命令を送信する

同じルームの特定複数のクライアントに対してRCPを送信することで、対象のクライアントに対してRPCを実行することが可能です。

NOTE: msgData は例の中で使われているだけでクライアントSDKには含まれていません。

RPC送信実装例:

msgData.Type = MSG_TYPE_RPC; // This tells the receiver it is an RPC
msgData.ID = 100; // This is the RPC ID to be executed
msgData.Parameters = parameterList;
List<string> remoteClients = new List<string>();
remoteClis.Add(otherMemberUserID);
remoteClis.Add(anotherMemberUserID);
remoteClis.Add(yetAanotherMemberUserID);
bool reliable = true;
// Send the RPC to multiple remote clients in a room
room.MessageTo(room.GetRoomID(), remoteClis, msgData.Encode(), reliable);

リモートクライアントから送られたRPCの実行命令を実行する

同じルームのリモートクライアントから送信されたRPCを受け取り実行する実装例を紹介します。

NOTE: msgData は例の中で使われているだけでクライアントSDKには含まれていません。

RPC受信実装例:

room.OnMemberMessage += OnRoomMemberMessage;

private void OnRoomMemberMessage(byte[] message)
{
  MessageData msgData = MessageData.Decode(message);
  switch(msgData.Type)
  {
    case MSG_TYPE_RPC:
      ExecuteRPC(msgData);
      break;
    default:
      // unknown message data type... 
    break;
  }
}

private void ExecuteRPC(MessageData msgData)
{
  switch(msgData.ID)
  {
    case RPC_CMD_HELLO:
      // Execute RPC SayHello here
      SayHello(msgData);
    default:
      // unknown RPC ID... 
    break;
  }
}

ルームのメンバークライアント全員に対してRPCの実行命令を送信する

同じルームの全てのクライアントに対してRCPを送信することで対象のクライアントでRPCを実行することが可能です。

NOTE: msgData は例の中で使われているだけでクライアントSDKには含まれていません。

RPC送信実装例:

msgData.Type = MSG_TYPE_RPC; // This tells the receiver it is an RPC
msgData.ID = 100; // This is the RPC ID to be executed
msgData.Parameters = parameterList;
List<string> remoteClients = new List<string>();
remoteClients.Add(otherMemberUserID);
bool reliable = true;
// Send the RPC to all remote clients in a room
room.BroadcastTo(room.GetRoomID(), msgData.Encode(), reliable); 

ルームのBroadcastを使って送信されたRPCの実行命令を実行する

同じルームのリモートクライアントから送信されたRPCを受け取り実行する実装例を紹介します。

NOTE: msgData は例の中で使われているだけでクライアントSDKには含まれていません。

RPC受信実装例:

room.OnMemberBroadcast += OnRoomMemberBroadcast;

private void OnRoomMemberBroadcast(byte[] message)
{
  MessageData msgData = MessageData.Decode(message);
  switch(msgData.Type)
  {
    case MSG_TYPE_RPC:
      ExecuteRPC(msgData);
      break;
    default:
      // unknown message data type... 
    break;
  }
}

private void ExecuteRPC(MessageData msgData)
{
  switch(msgData.ID)
  {
    case RPC_CMD_HELLO:
      // Execute RPC SayHello here
      SayHello(msgData);
    default:
      // unknown RPC command ID... 
    break;
  }
}

C#クライアントSDKのドキュメンテーションはこちら

大規模マルチユーザー間通信をDiarkisが実現します

お問い合わせ
このエントリーをはてなブックマークに追加

この記事もおすすめ

Diarkisをもっと知りたい、採用を検討したい場合は以下よりお問い合わせください

お問い合わせ 資料請求
PAGE TOP