/*-------------------------------------------------------------------------- Project: Horizon File: rdt.h Copyright (C)2010 Nintendo Co., Ltd.. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. $Rev: 21987 $ *-------------------------------------------------------------------------*/ #ifdef _WIN32 #include "stdafx.h" #endif #ifndef NN_RDT_H_ #define NN_RDT_H_ /*! @namespace nn::rdt @brief RDT(信頼性のあるローカル通信)の名前空間です。 概要: RDTライブラリは、UDSライブラリの機能を利用して、信頼性のあるデータ通信 (データの破損や欠落の無い通信)を実現するためのクラスライブラリです (RDTとUDSとの関係は、ちょうどTCPとIPの関係にたとえることもできます)。 RDTは、数十KByteを超えるような、ある程度大きなデータを送受信する際に 使われることを想定してデザインされています。 一方、1KByteに届かないような小さなサイズのデータを頻繁に送受信するような ケースでは、あまり良いパフォーマンスは得られません。 Senderクラス: データ送信側を表現するクラスです。後述するReceiverクラスに宛てて データを送信します。Senderクラスにはデータの再送機能などが実装されて おり、通信路においてパケット喪失などの障害が発生しても、データを欠落 させることなく受信側に届けます。 Receiverクラス: データ受信側を表現するクラスです。前述のSenderクラスから送信された データを受信します。受信側は送信側に向けて、適宜応答確認を行いつつ、 届いたデータを正しい順序で組み立てます。 UDSのセットアップ: アプリケーションはRDTを利用する前に、UDSをセットアップする必要があります。 すなわち、ネットワークの作成と、作成されたネットワークへの接続を済ませ、 UDSによるデータ通信が可能な状態としてからRDTの初期化処理を開始して ください。UDSのセットアップはアプリケーション側の責任です。作成した ネットワークの解放処理についても同様です。 特徴: RDTクラスライブラリでは、実データの流れは一方通行(@ref Sender から @ref Receiver へ)です。もしデータを双方向にやりとりする場合は、 SenderとReceiverのペアをもう一組作成する必要があります。 非ブロッキング動作: RDTクラスライブラリにおける関数呼び出しは、非ブロッキングで動作します。 Sender::Open(), Receiver::Wait(), Sender::Send(), Receiver::Receive() などの 関数呼び出しは、すぐに返ります。実際に送受信処理を行う関数は、双方のクラスに 用意されているProcess()関数で実行されます。 Process()関数: アプリケーションは、少なくとも毎ゲームフレーム程度の周期でProcess()関数を 呼び出してください。Process()関数を定期的に呼び出さないと、実際の通信処理や、 状態遷移は実行されません(※Cancel()関数などの動作は例外です)。 なお、Process()関数を数回ほど連続して呼び出すことで、送受信のパフォーマンスを 上げられる場合があります。 メモリ確保: RDTライブラリの内部では、動的なメモリ確保は行いません。 ライブラリが必要とするメモリは、Initialize()関数呼び出し時にアプリケーションが 与えてください。このとき、メモリのアライメントに注意してください。 注意点: RDTライブラリは、SenderまたはReceiverインスタンス1個につき、暗黙的に nn::uds::EndpointDescriptor を2つ消費します。 */ /*! @namespace nn::rdt::CTR @brief CTR の RDT(信頼性のあるローカル通信)の名前空間です。 */ #include #include #include #include namespace nn { namespace rdt { using namespace nn::rdt::CTR; } } #endif // end of NN_RDT_H_