CTR-Pia
5.4.3
Game Communication Engine
|
到達保証された通信を行うプロトコルです。 [詳細]
Public メソッド | |
void | Finalize () |
終了処理を行います。 | |
Result | Initialize (uint32_t sendBufferSize, uint32_t receiveBufferSize) |
インスタンスを初期化します。 BeginSetup() ~ EndSetup() 間で呼び出す必要があります。 | |
bool | IsInCommunication (StationId stationId) const |
指定した相手と通信中かどうかを取得します。 | |
Result | Receive (StationId *pSourceStationId, void *pBuffer, uint32_t *pDataSize, uint32_t bufferSize) |
データを受信します。 | |
Result | Send (StationId destinationStationId, const void *pData, uint32_t dataSize) |
データを送信します。 | |
Result | SendToAll (const void *pData, uint32_t dataSize) |
データを全ステーションに向けて送信します。 | |
void | SetThroughputLimit (uint32_t throughputLimit) |
common::Scheduler::Dispatch の 1 回の呼び出しあたりにこのプロトコルが送信するデータ量の上限を指定します。 | |
virtual void | Trace (uint64_t flag) const |
デバッグに有用な情報をプリントします。 | |
Static Public 変数 | |
static const uint32_t | ThroughputLimitMax = 0x0FFFFFFF |
SetThroughputLimit() で設定できる値の最大値です。 | |
到達保証された通信を行うプロトコルです。
void nn::pia::transport::ReliableProtocol::Finalize | ( | ) |
終了処理を行います。
Result nn::pia::transport::ReliableProtocol::Initialize | ( | uint32_t | sendBufferSize, |
uint32_t | receiveBufferSize | ||
) |
インスタンスを初期化します。 BeginSetup() ~ EndSetup() 間で呼び出す必要があります。
送信バッファ、受信バッファで実際に利用された数は common::WatermarkManager で common::WatermarkManager::KeyReliableProtocolSendBufferNum および common::WatermarkManager::KeyReliableProtocolReceiveBufferNum を 指定することにより計測することができます。
ReliableProtocol が消費するおおよそのメモリ量は、以下の計算式で求められます(単位はバイト)。
(sendBufferSize * 1500 + receiveBufferSize * 1500) * (Transport::Setting::maxStationNum - 1)
[in] | sendBufferSize | 送信バッファのデータ数です。 1 以上の値を指定する必要があります。 送信バッファは Send() したデータを送信相手に届いたことが確認されるまで保持するために使われます。 |
[in] | receiveBufferSize | 受信バッファのデータ数です。 1 以上の値を指定する必要があります。 受信バッファは、受信したデータを Receive() されるまで保持するために使われます。 |
ResultInvalidArgument 引数が誤っています。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
ResultAlreadyInitialized 既に初期化されています。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
bool nn::pia::transport::ReliableProtocol::IsInCommunication | ( | StationId | stationId | ) | const |
指定した相手と通信中かどうかを取得します。
自分および指定した相手がセッション内に存在すれば true を返します。
[in] | stationId | 通信相手の StationId です。 |
Result nn::pia::transport::ReliableProtocol::Receive | ( | StationId * | pSourceStationId, |
void * | pBuffer, | ||
uint32_t * | pDataSize, | ||
uint32_t | bufferSize | ||
) |
データを受信します。
common::Scheduler::Dispatch() のタイミングで受信したパケットは解析され、内部のバッファに蓄積されていきます。 Send() で分割されたデータがすべて届いていることが確認できているデータはこの関数で結合され取得できます。 内部バッファもこのタイミングで解放され、次の受信のために使われます。
[out] | pSourceStationId | 受信データの送信元の StationId を書き込むバッファへのポインタです。 |
[out] | pBuffer | 受信データを書き込むバッファへのポインタです。 |
[out] | pDataSize | 受信データのサイズを書き込むバッファへのポインタです。 |
[in] | bufferSize | 受信データを書き込むバッファのサイズ(バイト)です。 |
ResultInvalidState 初期化されていません。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
ResultInvalidArgument 引数が誤っています。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
ResultNotInCommunication 通信中でありません。セッションに参加していない状態と同じです。アプリケーションで適切にハンドリングしてください。
ResultNoData 受信したデータはありません。アプリケーションで適切にハンドリングしてください。
ResultBrokenData 受信したデータが大きすぎて受信バッファに入りきらないか渡されたバッファに書ききれません。セッションのスタートアップからやり直す必要があります。 この Result はチートなどによって送信側が不正なデータを送ってきたときに発生する可能性があるため実行時にハンドリングする必要がありますが、 送信側の挙動が正常な場合はこの Result が返らないようにプログラムを修正する必要があります。アプリケーションで適切にハンドリングしてください。
Result nn::pia::transport::ReliableProtocol::Send | ( | StationId | destinationStationId, |
const void * | pData, | ||
uint32_t | dataSize | ||
) |
データを送信します。
この関数でセットされた送信データは、パケットに対して適切なサイズに分割され内部のバッファに保持されます。 その後の common::Scheduler::Dispatch() の中で順次パケットが作成され送信されていきます。 送信してからしばらくたっても到達が確認できないデータは再送されます。 再送までの時間は RTT に応じて自動的に調整されます。 到達が確認できたデータはバッファから削除され、バッファはその後のデータ送信のために使う事ができるようになります。
[in] | destinationStationId | 送信先の StationId です。 |
[in] | pData | 送信するデータのアドレスです。 |
[in] | dataSize | 送信するデータのサイズ(バイト)です。 |
ResultInvalidState ReliableProtocol が初期化されていないか、session のセットアップが完了していない可能性があります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
ResultInvalidArgument 引数が誤っています。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
ResultNotInCommunication 指定された送信先と通信中ではありません。自分か指定した相手がセッション内に存在しません。アプリケーションで適切にハンドリングしてください。
ResultBufferIsFull 送信バッファに空きがありません。頻発する場合は、 Initialize() で指定する送信バッファのデータ数を増やすことを検討してください。アプリケーションで適切にハンドリングしてください。
ResultTemporaryUnavailable セッション移行処理中のため、一時的に API を利用できない状態です。ジョイントセッション機能使用時にのみ返ります。アプリケーションで適切にハンドリングしてください。
ResultNotFound 指定された送信先が見つかりません。アプリケーションで適切にハンドリングしてください。
Result nn::pia::transport::ReliableProtocol::SendToAll | ( | const void * | pData, |
uint32_t | dataSize | ||
) |
データを全ステーションに向けて送信します。
この関数でセットされた送信データは、パケットに対して適切なサイズに分割され内部のバッファに保持されます。 その後の common::Scheduler::Dispatch() の中で順次パケットが作成され送信されていきます。 送信してからしばらくたっても到達が確認できないデータは再送されます。 再送までの時間は RTT に応じて自動的に調整されます。 到達が確認できたデータはバッファから削除され、バッファはその後のデータ送信のために使う事ができるようになります。
[in] | pData | 送信するデータのアドレスです。 |
[in] | dataSize | 送信するデータのサイズ(バイト)です。 |
ResultInvalidState ReliableProtocol が初期化されていないか、session のセットアップが完了していない可能性があります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
ResultInvalidArgument 引数が誤っています。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
ResultNotInCommunication 通信中ではありません。アプリケーションで適切にハンドリングしてください。
ResultBufferIsFull 送信バッファに空きがありません。頻発する場合は、 Initialize() で指定する送信バッファのデータ数を増やすことを検討してください。アプリケーションで適切にハンドリングしてください。
void nn::pia::transport::ReliableProtocol::SetThroughputLimit | ( | uint32_t | throughputLimit | ) |
common::Scheduler::Dispatch の 1 回の呼び出しあたりにこのプロトコルが送信するデータ量の上限を指定します。
このプロトコルが common::Scheduler::Dispatch の 1 回あたりに送信するデータ量の平均値が この関数で設定した値以下になるように制限されます。 瞬間的にはここで設定した値以上のサイズの送信が行われることもあります。
設定できる値の最大値は ThroughputLimitMax です。これより大きな値を設定した場合は、ThroughputLimitMax を設定したものと扱います。 この API を呼び出さなかった場合のデフォルト値は ThroughputLimitMax です。
[in] | throughputLimit | 設定する送信データ量の上限サイズ(バイト)です。 |
|
virtual |
デバッグに有用な情報をプリントします。
[in] | flag | トレースフラグの論理和。詳細は TraceFlag 型を参照してください。 |
nn::pia::transport::Protocolを再定義しています。