PiaTransport には、パケロス(パケットロス)エミュレーション機能が用意されています。パケロスエミュレーション機能とは、通信において発生しうるパケロスを意図的に発生させることで、ネットワーク環境が良好でない状況を擬似的に作り出す機能です。
パケロスエミュレーション機能が有効な状態では、 PiaTransport の送受信スレッドが乱数値に応じてパケットをドロップします。送信スレッド側でドロップ対象となったパケットはネットワークに送出されることなく破棄されます。受信スレッド側でドロップ対象となったパケットは、各種プロトコルの受信関数に届けられることなく破棄されます。
アプリケーションは transport::Transport::DebugSetting 構造体のメンバ変数でパケロスエミュレーション機能の使用を指定し、transport::Transport::SetDebugSetting() 関数を呼び出します。
transport::Transport::SetDebugSetting() を製品版 ROM で呼び出してはいけません。
// Transport::DebugSetting 構造体のメンバ変数にパラメータを設定していきます。
nn::pia::transport::Transport::DebugSetting debugSetting; debugSetting.sendThreadLatencyEmulationPacketNum = 0; // ここではレイテンシエミュレーション機能を使いません。 debugSetting.receiveThreadLatencyEmulationPacketNum = 0; // ここではレイテンシエミュレーション機能を使いません。 debugSetting.isPacketLossEmulationEnabled = true; // パケロスエミュレーション機能を有効に設定します。 // Transport::SetDebugSetting() でデバッグ機能を利用する場合は、Transport::CreateInstance() よりも先に呼び出す必要があります。 nn::pia::transport::Transport::SetDebugSetting(debugSetting); // settingの各メンバ変数に適切な値をセット nn::pia::transport::Transport::Setting setting; ... ... // Transportクラスのインスタンスを作成 nn::pia::transport::Transport::GetInstance()->CreateInstance(setting); |
パケロスエミュレーション機能では、送信側と受信側にそれぞれ独立してパケロス率を設定できます。
nn::pia::transport::ThreadStreamManager* pMgr = nn::pia::transport::ThreadStreamManager::GetInstance();
PIA_SAMPLE_ASSERT(PIA_IS_VALID_POINTER(pMgr)); pMgr->SetSendThreadPacketLossRatio(5); // 送信側のパケロス率を 5% に設定 pMgr->SetReceiveThreadPacketLossRatio(5); // 受信側のパケロス率を 5% に設定 |