CTR-Pia  5.4.3
Game Communication Engine
 全て クラス ネームスペース 関数 変数 型定義 列挙型 列挙型の値 ページ
クラス nn::pia::transport::RoundRobinUnreliableProtocol

UnreliableProtocol を継承し、負荷を分散しながら送信する機能を追加したクラスです。 [詳細]

+ nn::pia::transport::RoundRobinUnreliableProtocolに対する継承グラフ

Public メソッド

void Finalize (void)
 インスタンスの終了処理を実行します。
 
uint32_t GetDataSizeLimit (void)
 一度に送信可能なデータサイズの上限を取得します。単位はバイトです。
 
Result Initialize (uint32_t recvBufNum=32)
 インスタンスを初期化します。
 
bool IsInCommunication (void) const
 通信可能な状態であるかどうかを判定します。
 
Result Receive (StationId *pSrcId, void *pRecvBuf, uint32_t *pRecvDataSize, uint32_t recvBuffSize)
 受信したデータをバッファに読み取ります。
 
Result Send (StationId destId, const void *pData, uint32_t dataSize)
 データを特定のステーションに向けて送信します。
 
Result SendToAll (const void *pData, uint32_t dataSize)
 データを全ステーションに向けて送信します。
 
Result SendToRoundRobin (const void *pData, uint32_t dataSize, uint32_t stationNum)
 データを複数のステーションに向けて送信します。
 
virtual void Trace (uint64_t flag) const
 デバッグに有用な情報をプリントします。
 

Static Public 変数

static const uint32_t MaxDataSize = common::ProtocolMessgaePayloadSizeMax
 UnreliableProtocol で一度に送信/受信が可能なデータサイズの最大値です。単位はバイトです。
 

説明

UnreliableProtocol を継承し、負荷を分散しながら送信する機能を追加したクラスです。

関数

void nn::pia::transport::UnreliableProtocol::Finalize ( void  )
inherited

インスタンスの終了処理を実行します。

Initialize() が呼び出されていない状態でこの関数を呼び出した場合は、何もせずに返ります。

参照
Initialize
uint32_t nn::pia::transport::UnreliableProtocol::GetDataSizeLimit ( void  )
inherited

一度に送信可能なデータサイズの上限を取得します。単位はバイトです。

この API 呼び出しで返される値は、アプリケーションによる MTU 値の設定や、 パケットへの署名の有無に影響されます。 この関数はスレッドセーフです。

アプリケーションがメッシュを使用する場合は、メッシュのスタートアップ処理が 完了した後でこの API を呼び出す必要があります。これよりも早いタイミングで 呼び出すと、正しい値が返されません。

アプリケーションがセッションを使用する場合は、セッション参加後にこの API を 呼び出す必要があります。これよりも早いタイミングで呼び出すと、正しい値が 返されないことがあります。

戻り値
Send(), SendToAll() で一度に送信可能なデータサイズの上限が返されます。単位はバイトです。
参照
Send, SendToAll
Result nn::pia::transport::UnreliableProtocol::Initialize ( uint32_t  recvBufNum = 32)
inherited

インスタンスを初期化します。

BeginSetup()EndSetup() 間で呼び出す必要があります。

引数
[in]recvBufNum受信バッファの個数。受信バッファ1個につき、約 1500 バイトのメモリが使用されます。
戻り値
成功すれば、 IsSuccess() が true を返す Result が返されます。この関数がエラーを返さないようにアプリケーションを実装する必要があります。
返るエラーの一覧:

ResultNotInitialized transport モジュールが未初期化です。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。

ResultAllocationFailed メモリ確保に失敗しました。 common::Initialize() 呼び出し時に、より多くのメモリを供給することを検討してください。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。

ResultAlreadyInitialized UnreliableProtocol は既に初期化されています。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。

ResultInvalidArgument 引数が誤っています。 recvBufNum に 0 を指定するなどした場合に返されます。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。

ResultInvalidState BeginSetup()EndSetup() 間で呼び出されていません。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。

参照
Finalize
bool nn::pia::transport::UnreliableProtocol::IsInCommunication ( void  ) const
inherited

通信可能な状態であるかどうかを判定します。

戻り値
通信が可能な状態であれば true 、そうでなければ false が返されます。
Result nn::pia::transport::UnreliableProtocol::Receive ( StationId pSrcId,
void *  pRecvBuf,
uint32_t *  pRecvDataSize,
uint32_t  recvBuffSize 
)
inherited

受信したデータをバッファに読み取ります。

データを受信します。ただし、この関数呼び出しが無線モジュールの受信処理実行のトリガーとなっている わけではありません。 無線モジュールからパケットを受信する処理は、 Pia 内部の受信スレッドによって定期的に実行されています。 この受信スレッドが受信したパケットは、 PiaTransport のディスパッチ処理が実行されるタイミングで パケット解析処理用バッファにコピーされ、データが復元されます。 この関数は、このようにして復元されたデータをアプリケーション側で用意したバッファにコピーする処理を実行します。

引数
[out]pSrcId読み取ったデータの送信元 StationId が書き込まれます。
[out]pRecvBufデータの読み取り先バッファです。
[out]pRecvDataSize実際に読み取ることのできたデータサイズが書き込まれます。単位はバイトです。
[in]recvBuffSizeデータの読み取り先バッファのサイズを指定します。単位はバイトです。
戻り値
成功すれば、 IsSuccess() が true を返す Result が返されます。
返るエラーの一覧:

ResultInvalidArgument 引数に誤りがあります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。

ResultInvalidState UnreliableProtocol::Initialize() が呼ばれていなかったり、session のセットアップが完了していない可能性があります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。

ResultBufferShortage 読み取りバッファのサイズが不足しています。 recvBuffSize で指定したサイズを上回る大きさのデータが到着していた場合に返されます。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。

ResultNoData 受信バッファが空っぽで、読み取ることのできるデータがありませんでした。アプリケーションで適切にハンドリングしてください。

ResultNotInCommunication 通信が可能な状態ではありません。アプリケーションで適切にハンドリングしてください。

ResultTemporaryUnavailable セッション移行処理中のため、一時的に API を利用できない状態です。ジョイントセッション機能使用時にのみ返ります。アプリケーションで適切にハンドリングしてください。

参照
Send, SendToAll, MaxDataSize
Result nn::pia::transport::UnreliableProtocol::Send ( StationId  destId,
const void *  pData,
uint32_t  dataSize 
)
inherited

データを特定のステーションに向けて送信します。

データを送信します。ただし、この関数を呼び出しただけでは実際のデータ送信は行われません。 この関数は、アプリケーションが渡したデータを Pia 内部のパケット生成処理用バッファにコピーします。 その後、 PiaTransport のディスパッチ処理が実行されることで、パケット生成処理用バッファにコピー されていたデータ群がパケットにまとめられ、 Pia 内部の送信スレッドに渡されます。実際の送信処理は、 この送信スレッドが定期的にパケットを無線モジュールに渡すことで行われます。

引数
[in]destId送信先の StationId 。
[in]pData送信したいデータの先頭を指すポインタ。
[in]dataSize送信データサイズ。単位はバイトです。 GetDataSizeLimit() が返す値を超過してはいけません。
戻り値
成功すれば、 IsSuccess() が true を返す Result が返されます。
返るエラーの一覧:

ResultInvalidArgument 引数に誤りがあります。送信データサイズが過大であった場合にも、このエラーが返されます。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。

ResultInvalidState UnreliableProtocol::Initialize() が呼ばれていなかったり、session のセットアップが完了していない可能性があります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。

ResultNotInCommunication 通信が可能な状態ではありません。アプリケーションで適切にハンドリングしてください。

ResultTemporaryUnavailable セッション移行処理中のため、一時的に API を利用できない状態です。ジョイントセッション機能使用時にのみ返ります。アプリケーションで適切にハンドリングしてください。

ResultNotFound 指定された送信先が見つかりません。

参照
SendToAll, Receive, MaxDataSize, GetDataSizeLimit, IsInCommunication
Result nn::pia::transport::UnreliableProtocol::SendToAll ( const void *  pData,
uint32_t  dataSize 
)
inherited

データを全ステーションに向けて送信します。

データを送信します。ただし、この関数を呼び出しただけでは実際のデータ送信は行われません。 この関数は、アプリケーションが渡したデータを Pia 内部のパケット生成処理用バッファにコピーします。 その後、 PiaTransport のディスパッチ処理が実行されることで、パケット生成処理用バッファにコピー されていたデータ群がパケットにまとめられ、 Pia 内部の送信スレッドに渡されます。実際の送信処理は、 この送信スレッドが定期的にパケットを無線モジュールに渡すことで行われます。

引数
[in]pData送信したいデータの先頭を指すポインタ。
[in]dataSize送信データサイズ。単位はバイトです。 GetDataSizeLimit() が返す値を超過してはいけません。
戻り値
成功すれば、 IsSuccess() が true を返す Result が返されます。
返るエラーの一覧:

ResultInvalidArgument 引数に誤りがあります。送信データサイズが過大であった場合にも、このエラーが返されます。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。

ResultInvalidState UnreliableProtocol::Initialize() が呼ばれていない可能性があります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。

ResultNotInCommunication 通信が可能な状態ではありません。アプリケーションで適切にハンドリングしてください。

ResultTemporaryUnavailable セッション移行処理中のため、一時的に API を利用できない状態です。ジョイントセッション機能使用時にのみ返ります。アプリケーションで適切にハンドリングしてください。

参照
Send, Receive, MaxDataSize, GetDataSizeLimit, IsInCommunication
Result nn::pia::transport::RoundRobinUnreliableProtocol::SendToRoundRobin ( const void *  pData,
uint32_t  dataSize,
uint32_t  stationNum 
)

データを複数のステーションに向けて送信します。

自分の StationIndex を始点とし、自分の StationIndex より大きい StationIndex が割り当てられた Station から順に stationNum で指定した数のステーションに向けてデータを送信します。 最後にデータを送信した StationIndex を次回呼出し時の始点とします。

例えば、Station A, B, C, D, E, F のセッションで自分の Station は F, 宛先数 2 で SendToRoundRobin() を 呼び出した場合は以下のように送信されます。

1回目の呼出し: SendToRoundRobin(Data1) Data1 を A と B
2回目の呼出し: SendToRoundRobin(Data2) Data2 を C と D
3回目の呼出し: SendToRoundRobin(Data3) Data3 を E と A
4回目の呼出し: SendToRoundRobin(Data4) Data4 を B と C
5回目の呼出し: SendToRoundRobin(Data5) Data5 を D と E

この関数を呼び出しただけでは実際のデータ送信は行われません。 この関数は、アプリケーションが渡したデータを Pia 内部のパケットバッファにコピーします。 パケットは Pia 内部の送信スレッドにより定期的に送信されます。

引数
[in]pData送信したいデータの先頭を指すポインタ。
[in]dataSize送信データサイズ。単位はバイトです。 GetDataSizeLimit() が返す値を超過してはいけません。
[in]stationNumデータを送信したいステーションの数です。
戻り値
成功すれば、 IsSuccess() が true を返す Result が返されます。
返るエラーの一覧:

ResultInvalidArgument 引数に誤りがあります。送信データサイズが過大であった場合にも、このエラーが返されます。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。

ResultInvalidState Initialize() が呼ばれていない可能性があります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。

ResultNotInCommunication 通信が可能な状態ではありません。アプリケーションで適切にハンドリングしてください。

参照
Send, Receive, MaxDataSize, GetDataSizeLimit, IsInCommunication
virtual void nn::pia::transport::RoundRobinUnreliableProtocol::Trace ( uint64_t  flag) const
virtual

デバッグに有用な情報をプリントします。

引数
[in]flagトレースフラグの論理和。詳細は TraceFlag 型を参照してください。

nn::pia::transport::UnreliableProtocolを再定義しています。

変数

const uint32_t nn::pia::transport::UnreliableProtocol::MaxDataSize = common::ProtocolMessgaePayloadSizeMax
staticinherited

UnreliableProtocol で一度に送信/受信が可能なデータサイズの最大値です。単位はバイトです。

この定数値は 1440 ですが、アプリケーションが小さめの MTU 値を設定した場合には、実際に 送受信可能なデータサイズはこの値よりも小さくなります。