クラス RTC::SdoServiceProviderBase

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サービスプロバイダはこの基底 クラスを継承して実装される。

このオブジェクトのライフサイクルは以下の通り。

  1. オブジェクトは通常、共有オブジェクト (so, DLL) としてコンパイル・ リンクされる。
  2. マネージャに対してロードされるとモジュール初期化関数によりオブ ジェクトファクトリが、SdoServiceProviderFactory に対して登録さ れる。登録のキーにはサービスインターフェースの IFR (interface repository) ID が利用され、これによりサービスが区別される。
  3. rtc.conf等のコンフィギュレーション指定により、有効化することが 指定されているサービスインプロバイダは、RTCの起動と同時にインス タンス化される。
  4. インスタンス化後、初期化関数 init() が呼ばれる。引数には当該サー ビスのためのコンフィギュレーションオプションが coil::Propertyに より渡される。
  5. インスタンス化されたSDOサービスプロバイダは SDO::get_get_sdo_service() により外部からアクセスされる。このと き、サービスを指定するIDはIFR IDと同じである。このときのアタッ チシーケンスは以下の通り。
  6. RTCがfinalizeされ解体されると同時にSDOサービスプロバイダも解体 されるが、その際にはSdoServiceProviderBasefinalize()がコール されるので、ここでリソースの解放など終了処理を行う。
   [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 を返す。

戻り値:
このオブジェクトが保持している 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 を返す。

引数:
rtobj このオブジェクトがインスタンス化された RTC
profile 外部から与えられた SDO ServiceProfile
戻り値:
与えられた SDO Service や ServiceProfile が不正の場合 false
virtual bool RTC::SdoServiceProviderBase::reinit ( const SDOPackage::ServiceProfile &  profile  )  [pure virtual]

コンシューマクラスの再初期化関数

このオブジェクトの再初期化を行う。ServiceProfile には id フィー ルドにセッション固有の UUID がセットされているが、同一の id の場 合、properties に設定された設定情報の変更や、service フィールド のサービスの参照の変更が行われる。その際に呼ばれるのがこの reinit() 関数である。実装では、service フィールドのオブジェクト リファレンスの同一性を確認し、異なっている場合保持しているリファ レンスを更新する必要がある。また properties には新たな設定が与え られている可能性があるので、内容を読み込み設定を更新する。

引数:
profile 新たに与えられた SDO ServiceProfile
戻り値:
不正な ServiceProfile が与えられた場合は false
OpenRTM-aistに対してFri Oct 28 18:31:16 2016に生成されました。  doxygen 1.6.3