こちらの記事はバージョンの古いものを基にしています。
最新はこちら。
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のドキュメンテーションはこちら。