OpenRTM-aist 2.1.0
読み取り中…
検索中…
一致する文字列を見つけられません
公開メンバ関数 | 全メンバ一覧
RTC::SdoServiceProviderBase クラスabstract

SdoServiceProvider 基底クラス [詳解]

#include <SdoServiceProviderBase.h>

RTC::SdoServiceProviderBase の継承関係図
Inheritance graph
[凡例]
RTC::SdoServiceProviderBase 連携図
Collaboration graph
[凡例]

公開メンバ関数

 ~SdoServiceProviderBase () override
 仮想デストラクタ
 
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_sdo_service() により外部からアクセスされる。このと き、サービスを指定するIDはIFR IDと同じである。このときのアタッ チシーケンスは以下の通り。
  6. RTCがfinalizeされ解体されると同時にSDOサービスプロバイダも解体 されるが、その際にはSdoServiceProviderBase::finalize()がコール されるので、ここでリソースの解放など終了処理を行う。

  [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>);
  }
};

構築子と解体子

◆ ~SdoServiceProviderBase()

RTC::SdoServiceProviderBase::~SdoServiceProviderBase ( )
overridedefault

仮想デストラクタ

関数詳解

◆ finalize()

virtual void RTC::SdoServiceProviderBase::finalize ( )
pure virtual

終了処理

◆ getProfile()

virtual const SDOPackage::ServiceProfile & RTC::SdoServiceProviderBase::getProfile ( ) const
pure virtual

ServiceProfile を返す

◆ init()

virtual bool RTC::SdoServiceProviderBase::init ( RTObject_impl rtobj,
const SDOPackage::ServiceProfile &  profile 
)
pure virtual

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

◆ reinit()

virtual bool RTC::SdoServiceProviderBase::reinit ( const SDOPackage::ServiceProfile &  profile)
pure virtual

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


このクラス詳解は次のファイルから抽出されました: