RPC(Remote Procedure Call)

目次

  概要
  事前設定
  受信制御:受信メソッドの定義
  送信制御:MonobitEngine.MonobitView.RPC メソッド (1)
  送信制御:MonobitEngine.MonobitView.RPC メソッド (2)
  送信制御:MonobitEngine.MonobitView.RpcSecure メソッド (1)
  送信制御:MonobitEngine.MonobitView.RpcSecure メソッド (2)


概要

任意の情報を通信するための手段

  RPCとは「Remote Procedure Call(リモートプロシージャコール)」の略で、
  簡単に説明すると、ネットワーク上にある、別のクライアント端末のメソッドを呼び出す仕組みのことです。

  MUN では、ネットワーク通信を使って、端末間で情報をやり取りする場合、RPC を用いて実行します。


事前設定

MonobitView コンポーネントの追加が必要です

  RPCメッセージの送受信処理は MonobitView コンポーネントを通じで実行されます。
  そのため、送信処理、および受信処理が、同一のMonobitView コンポーネントを参照できるように、
  GameObject に MonobitView コンポーネントを追加しておく必要があります。

MonobitEngine.MonoBehavior の継承が必要です

  monobitView コンポーネントの参照のため、 RPCメッセージの送信処理、および受信処理が記述されるクラスは、
  MonobitEngine.MonoBehavior を継承している必要があります。

MUNサーバに接続し、かつルームに入室している必要があります

  MUNサーバに接続していない場合はもちろん、ルーム内に入室している状態でない場合にも、
  RPCメッセージの送受信を受け付けません。


受信制御:受信メソッドの定義

[MunRPC]のアトリビュートを付ける

  RPCメッセージの受信に伴い呼び出される「別のクライアント端末のメソッド」の定義については、
  メソッド定義の接頭に [MunRPC] のアトリビュートを付加する必要があります。

RPCメッセージとして受信したい情報は、引数として指定する

  RPCとして任意の情報を送受信したい場合、その受信情報を「メソッドの引数」として指定して下さい。
  なお、現在のMUNでは、以下の種類の値を引数型として指定することが出来ます。
・bool(Boolean)
・byte(Byte)
・char(SByte)
・short(Int16)
・unsingned short(UInt16)
・int(Int32)
・unsigned int(UInt32)
・long(Int64)
・unsigned long(UInt64)
・float(Single)
・double(Double)
・string(String)
・object(Object)
・Vector2, Vector3, Vector4
・Quaternion
・上述のデータ型に基づく、任意の長さを持つ配列情報
・上述のデータ型に基づく Hashtable
・上述のデータ型に基づく Dictionary

戻り値型は「void」固定です

  RPCの受信メソッドは、何かしらの情報を送信者に「return で返す」ということはできません。
  もし何らかの情報を返したい場合には、受信メソッド内で、別途 RPC 送信処理を実行してください。
  (その送信処理に対応した受信メソッドが必要です。)

記述例

  RPCの受信メソッドの記述例です。
  (このRPC受信メソッドの送信側の記述については、後述の説明を御覧ください。)
// RPCで「送信者のプレイヤーID」、「送信日時」を受け取り、その情報を表示します。
[MunRPC]
void ReceiveFunc( int id, string nowTime )
{
    Debug.Log( "id = " + id + ", nowTime = " + nowTime );
}


送信制御:MonobitEngine.MonobitView.RPC メソッド (1)

機能

  指定方式に基づき、RPCメッセージを送信します。

引数

変数名 内容
string MethodName 受信メソッドの名前を文字列で指定します。
MonobitEngine.MonobitTargets target 送信する宛先や送信方法に対する指定。
以下に示す定数値の、いずれか1つを指定してください。
MonobitTarget.All 送信者自身には即座に受信し、送信者自身以外のルーム内プレイヤーに対し、サーバを介して送信します。
MonobitTarget.Other 送信者自身以外のルーム内プレイヤーに対し、サーバを介して送信します。
MonobitTarget.Host ホストにのみ、サーバを介して送信します。
MonobitTarget.AllBuffered 送信者自身には即座に受信し、送信者自身以外のルーム内プレイヤーに対し、サーバを介して送信します。
途中入室したユーザーに対しては、送信者自身がルーム内に留まる限り、遅延送信(バッファリング)されます。
MonobitTarget.OtherBuffered 送信者自身以外のルーム内プレイヤーに対し、サーバを介して送信します。
途中入室したユーザーに対しては、送信者自身がルーム内に留まる限り、遅延送信(バッファリング)されます。
MonobitTarget.AllViaServer 送信者自身も含むルーム内プレイヤー全員に対し、サーバを介して送信します。
MonobitTarget.AllBufferedViaServer 送信者自身も含むルーム内プレイヤー全員に対し、サーバを介して送信します。
途中入室したユーザーに対しては、送信者自身がルーム内に留まる限り、遅延送信(バッファリング)されます。
params object[] parameters 受信メソッドに渡す、任意の引数を指定します。
必ず受信メソッドと同じ型、同じ順番で記述してください。

戻り値

内容
void -

記述例

/*
 * 上述の受信メソッドで説明した「ReceiveFunc」に対し、自身のプレイヤーIDと、現在の時刻を、
 * 自身以外の全員(途中入室者を含む)に対して送信します。
 * (MonobitEngine.MonoBehaviour を継承しているクラス内であることが条件です)
 */
monobitView.RPC("ReceiveFunc", MonobitEngine.MonobitTargets.OthersBuffered, MonobitEngine.MonobitNetwork.player.ID, System.DateTime.Now.ToString());


送信制御:MonobitEngine.MonobitView.RPC メソッド (2)

機能

  指定したプレイヤーに対し、RPCメッセージを送信します。

引数

変数名 内容
string MethodName 受信メソッドの名前を文字列で指定します。
MonobitEngine.MonobitPlayer targetPlayer 送信相手となるプレイヤー情報を指定します。
params object[] parameters 受信メソッドに渡す、任意の引数を指定します。
必ず受信メソッドと同じ型、同じ順番で記述してください。

戻り値

内容
void -

記述例

/*
 * 上述の受信メソッドで説明した「ReceiveFunc」に対し、自身のプレイヤーIDと、現在の時刻を、
 * 「他のプレイヤーの誰か」に対して送信します。
 * (MonobitEngine.MonoBehaviour を継承しているクラス内であることが条件です)
 */
if( MonobitEngine.MonobitNetwork.otherPlayersList != null )
{
    monobitView.RPC( "ReceiveFunc", MonobitEngine.MonobitNetwork.otherPlayersList[0], MonobitEngine.MonobitNetwork.player.ID, System.DateTime.Now.ToString() );
}


送信制御:MonobitEngine.MonobitView.RpcSecure メソッド (1)

機能

  指定方式に基づき、セキュアなRPCメッセージを送信します。

引数

変数名 内容
string MethodName 受信メソッドの名前を文字列で指定します。
MonobitEngine.MonobitTargets target 送信する宛先や送信方法に対する指定。
以下に示す定数値の、いずれか1つを指定してください。
MonobitTarget.All 送信者自身には即座に受信し、送信者自身以外のルーム内プレイヤーに対し、サーバを介して送信します。
MonobitTarget.Other 送信者自身以外のルーム内プレイヤーに対し、サーバを介して送信します。
MonobitTarget.Host ホストにのみ、サーバを介して送信します。
MonobitTarget.AllBuffered 送信者自身には即座に受信し、送信者自身以外のルーム内プレイヤーに対し、サーバを介して送信します。
途中入室したユーザーに対しては、送信者自身がルーム内に留まる限り、遅延送信(バッファリング)されます。
MonobitTarget.OtherBuffered 送信者自身以外のルーム内プレイヤーに対し、サーバを介して送信します。
途中入室したユーザーに対しては、送信者自身がルーム内に留まる限り、遅延送信(バッファリング)されます。
MonobitTarget.AllViaServer 送信者自身も含むルーム内プレイヤー全員に対し、サーバを介して送信します。
MonobitTarget.AllBufferedViaServer 送信者自身も含むルーム内プレイヤー全員に対し、サーバを介して送信します。
途中入室したユーザーに対しては、送信者自身がルーム内に留まる限り、遅延送信(バッファリング)されます。
bool encrypt 送信するRPCメッセージの暗号化を適用するかどうかの設定です。
現在のMUNでは、このフラグの設定に関わらず、全て暗号化されます。
params object[] parameters 受信メソッドに渡す、任意の引数を指定します。
必ず受信メソッドと同じ型、同じ順番で記述してください。

戻り値

内容
void -

記述例

/*
 * 上述の受信メソッドで説明した「ReceiveFunc」に対し、自身のプレイヤーIDと、現在の時刻を、
 * 自身以外の全員(途中入室者を含む)に対して送信します。
 * (MonobitEngine.MonoBehaviour を継承しているクラス内であることが条件です)
 */
monobitView.RpcSecure( "ReceiveFunc", MonobitEngine.MonobitTargets.OthersBuffered, true, MonobitEngine.MonobitNetwork.player.ID, System.DateTime.Now.ToString() );


送信制御:MonobitEngine.MonobitView.RpcSecure メソッド (2)

機能

  指定したプレイヤーに対し、RPCメッセージを送信します。

引数

変数名 内容
string MethodName 受信メソッドの名前を文字列で指定します。
MonobitEngine.MonobitPlayer targetPlayer 送信相手となるプレイヤー情報を指定します。
bool encrypt 送信するRPCメッセージの暗号化を適用するかどうかの設定です。
現在のMUNでは、このフラグの設定に関わらず、全て暗号化されます。
params object[] parameters 受信メソッドに渡す、任意の引数を指定します。
必ず受信メソッドと同じ型、同じ順番で記述してください。

戻り値

内容
void -

記述例

/*
 * 上述の受信メソッドで説明した「ReceiveFunc」に対し、自身のプレイヤーIDと、現在の時刻を、
 * 「他のプレイヤーの誰か」に対して送信します。
 * (MonobitEngine.MonoBehaviour を継承しているクラス内であることが条件です)
 */
if( MonobitEngine.MonobitNetwork.otherPlayersList != null )
{
    monobitView.RpcSecure( "ReceiveFunc", MonobitEngine.MonobitNetwork.otherPlayersList[0], true, MonobitEngine.MonobitNetwork.player.ID, System.DateTime.Now.ToString() );
}