UDN
Search public documentation:

ReplicationPatternClientToServerRPCJP
English Translation
中国翻译
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 ホーム > ネットワーク & レプリケーション > クライアントからサーバーへのリモートプロシージャコールのパターン

クライアントからサーバーへのリモートプロシージャコールのパターン


概要


クライアントからサーバーへのリモートプロシージャコールは、クライアントデータをサーバーに送信する場合に使用されます。クライアントデータはそれ自身でサーバーにレプリケートしません。これによって、ゲーム ステート内の全クラス変数に対する制御をサーバーが維持できます。クライアントからサーバーへのリモートプロシージャコールをクライアントに使用させることによって、サーバーは、入ってくるクライアントデータをインターセプトする機会をつねに得られます。

Player Controller (プレイヤーコントローラ) クラス


プレイヤーコントローラは、クライアントとサーバー間で通信ブリッジの 1 つとして機能します。各プレイヤーは、それぞれ自身のプレヤーコントローラを所有します。以下では、Reliable (信頼できる) がデモンストレーション目的にしか使用されていません。Reliable は、リモートプロシージャコールとそのパラメータが絶対にサーバーに届く必要がある場合に使用されます。Unreliable (信頼できない) は、帯域幅が飽和した状況にともなって、リモートプロシージャコールとそのパラメータが喪失、欠如しても構わない場合に使用されます。

<

CTSRPC_PlayerController.uc

class CTSRPC_PlayerController extends PlayerController;

/**
 * Exec function which allows the client to send text to the server
 *
 * Network: Client
 */
exec function SendTextToServer(String TextToSend)
{
  // If the role of the player controller is not authoritive
  // Text is not empty
  if (Role < Role_Authority && TextToSend != "")
  {
    `Log(Self$":: Client wants to send '"$TextToSend$"' to the server.");
    ServerReceiveText(TextToSend);
  }
}

/**
 * Server function which receives text from the client
 *
 * Network: Dedicated/Listen Server
 */
reliable server function ServerReceiveText(String ReceivedText)
{
  // If the role of the player controller is authoritive
  // Text is not empty
  if (Role == Role_Authority && ReceivedText != "")
  {
    `Log(Self$":: Server received text, '"$ReceivedText$"'.");
  }
}

defaultproperties
{
}

Game Info (ゲーム情報) クラス


GameInfo はサーバーにしか存在しません。以下のパターンでは、プレイヤーを接続するための正しい PlayerController をスポーンさせるためにしか使用されません。

<

CTSRPC_GameInfo.uc
class CTSRPC_GameInfo extends GameInfo;

defaultproperties
{
  PlayerControllerClass=class'CTSRPC_PlayerController'
}

テスティング


クライアント上で、SendTextToServer が My message to the server. Road house! (メッセージをサーバーに。ロードハウス!) というパラメータをともなって実行されています。

CTSRPC_ClientConsoleWindow.jpg

サーバー上で、リモートプロシージャコールの ServerReceiveText が、My message to the server. Road house! (メッセージをサーバーに。ロードハウス!) というパラメータをともなって受信されています。

CTSRPC_ServerConsoleWindow.jpg

ダウンロード


  • このパターンの中で使用されているソースコードは、 ここから ダウンロードすることができます。(ClientToServerRPCExample.zip)