SdoServiceProvider 基底クラス. [詳細]
#include <SdoServiceProviderBase.h>
Public メソッド | |
virtual | ~SdoServiceProviderBase () |
仮想デストラクタ | |
virtual bool | init (RTObject_impl &rtobj, const SDOPackage::ServiceProfile &profile)=0 |
コンシューマクラスの初期化関数 | |
virtual bool | reinit (const SDOPackage::ServiceProfile &profile)=0 |
コンシューマクラスの再初期化関数 | |
virtual const SDOPackage::ServiceProfile & | getProfile () const =0 |
ServiceProfile を返す. | |
virtual void | finalize ()=0 |
終了処理 |
SdoServiceProvider 基底クラス.
SDOで定義されているSDOサービスのプロバイダを実装するための基底クラ ス。SDOサービスには、外部から提供サービスをRTC(SDO)側で利用する SDOサービスコンシューマと、RTC(SDO)自身がSDOサービスを提供するSDO サービスプロバイダがある。すべてのSDOサービスプロバイダはこの基底 クラスを継承して実装される。
このオブジェクトのライフサイクルは以下の通り。
[RTC] [SDO service] [Other] | : | | instantiate : | |------------->: | | init() | | |------------->| | | | get_service_profiles() | |<--------------------------------------| | | get_sdo_service() | |<--------------------------------------| | | use service | | |<-----------------------| | | | | finalize() | | |------------->x | x x |
このクラスの実装に当たっては、少なくとも以下の純粋仮想関数を実装す る必要がある。
SdoServiceProvider は通常共有オブジェクトとしてコンパイル・リンク される。共有オブジェクトのエントリポイントは通常コンパイルされたファ イル名の basename + "Init" にしておく。以下に、クラス名、ファイル 名、エントリポイント関数名の推奨例を示す。
エントリポイント関数は通常以下のように、SdoServiceProviderFactory に当該コンシューマのファクトリ (と解体ファンクタ) を登録する以下の ような関数になる。
extern "C" { void MySdoServiceProviderInit() { RTC::SdoServiceProviderFactory& factory = RTC::SdoServiceProviderFactory::instance(); factory.addFactory(CORBA_Util::toRepositoryId<OpenRTM::MySdoService>(), coil::Creator< RTC::SdoServiceProviderBase, RTC::MySdoServiceProvider>, coil::Destructor< RTC::SdoServiceProviderBase, RTC::MySdoServiceProvider>); } };
virtual RTC::SdoServiceProviderBase::~SdoServiceProviderBase | ( | ) | [inline, virtual] |
仮想デストラクタ
virtual void RTC::SdoServiceProviderBase::finalize | ( | ) | [pure virtual] |
終了処理
SDOサービスがでタッチされる際に呼び出される終了処理用関数。サー ビスのでタッチに際して、当該オブジェクトが保持するリソースを解放 するなどの処理を行う。
virtual const SDOPackage::ServiceProfile& RTC::SdoServiceProviderBase::getProfile | ( | ) | const [pure virtual] |
ServiceProfile を返す.
init()/reinit()で与えられた ServiceProfile は通常オブジェクト内 で保持される。SDO Service 管理フレームワークは管理上このオブジェ クトに対応する ServiceProfile を必要とするので、この関数では保持 されている ServiceProfile を返す。
virtual bool RTC::SdoServiceProviderBase::init | ( | RTObject_impl & | rtobj, | |
const SDOPackage::ServiceProfile & | profile | |||
) | [pure virtual] |
コンシューマクラスの初期化関数
このオブジェクトの初期化を行う。外部からSDOサービスが ServiceProfile とともにアタッチされると、SDOコンシューマがインス タンス化され、その直後に SDO サービスがアタッチされた RTC と与え られた ServiceProfile を引数としてこの関数が呼ばれる。
関数内では、ServiceProfile 内の SDO サービスリファレンスを CorbaProvider クラス等を利用しオブジェクト内に保持するとともに、 properties から設定内容を読み込みサービス固有の設定等を行う。与 えられたサービスのオブジェクトリファレンスが不正、あるいは properties の内容が不正、等の場合は戻り値に false を返す。
virtual bool RTC::SdoServiceProviderBase::reinit | ( | const SDOPackage::ServiceProfile & | profile | ) | [pure virtual] |
コンシューマクラスの再初期化関数
このオブジェクトの再初期化を行う。ServiceProfile には id フィー ルドにセッション固有の UUID がセットされているが、同一の id の場 合、properties に設定された設定情報の変更や、service フィールド のサービスの参照の変更が行われる。その際に呼ばれるのがこの reinit() 関数である。実装では、service フィールドのオブジェクト リファレンスの同一性を確認し、異なっている場合保持しているリファ レンスを更新する必要がある。また properties には新たな設定が与え られている可能性があるので、内容を読み込み設定を更新する。
profile | 新たに与えられた SDO ServiceProfile |