jp.go.aist.rtm.RTC
インタフェース SdoServiceConsumerBase

既知の実装クラスの一覧:
ComponentObserverConsumer

public interface SdoServiceConsumerBase

SdoServiceConsumerBase インターフェース。

SDOで定義されているSDOサービスのコンシューマを実装するための基底ク ラス。SDOサービスには、外部から提供サービスをRTC(SDO)側で利用する SDOサービスコンシューマと、RTC(SDO)自身がSDOサービスを提供するSDO サービスプロバイダがある。すべてのSDOサービスコンシューマはこの基 底クラスを継承して実装される。 このオブジェクトのライフサイクルは以下の通り。

 
   [RTC] [SDO consumer] [Configuration]  [SDO service]    [Other]
     |          :             |                 |            |
     |          :         get_configuration()   |            |
     |<---------:-------------------------------|------------|
     |          :             |                 |            |
     |          :             |   add_service_profile(prof)  |
     |          :  create()   |<----------------|------------|
     |          |<------------|                 |            |
     |          |         call_sdo_service()    |            |
     |          |-------------|---------------->|            |
     |          |         call_sdo_service2()   |            |
     |          |-------------|---------------->|            |
     |          |             |       :         |            |
     |          |             |                 |            |
     |          |             | remove_service_profile(id)   |
     |          |  delete()   |<----------------|------------|
     |          x<------------|                 |            |
     |                        |                 x            x

 
このクラスの実装に当たっては、少なくとも以下の純粋仮想関数を実装す る必要がある。 SdoServiceConsumer は通常共有オブジェクトとしてコンパイル・リンク される。共有オブジェクトのエントリポイントは通常コンパイルされたファ イル名の basename + "Init" にしておく。以下に、クラス名、ファイル 名、エントリポイント関数名の推奨例を示す。 エントリポイント関数は通常以下のように、SdoServiceConsumerFactory に当該コンシューマのファクトリ (と解体ファンクタ) を登録する以下の ような関数になる。
 extern "C"
 {
   void MySdoServiceConsumerInit()
   {
     RTC::SdoServiceConsumerFactory& factory
       = RTC::SdoServiceConsumerFactory::instance();
     factory.addFactory(CORBA_Util::toRepositoryId(),
                        ::coil::Creator< ::RTC::SdoServiceConsumerBase,
                        ::RTC::MySdoServiceConsumer>,
                        ::coil::Destructor< ::RTC::SdoServiceConsumerBase,
                        ::RTC::MySdoServiceConsumer>);
   }
 };
 


メソッドの概要
 void finalize()
          終了処理 {@.ja SDOサービスがでタッチされる際に呼び出される終了処理用関数。
 ServiceProfile getProfile()
          ServiceProfile を返す {@.ja init()/reinit()で与えられた ServiceProfile は通常オブジェクト内 で保持される。
 boolean init(RTObject_impl rtobj, ServiceProfile profile)
          コンシューマクラスの初期化関数 {@.ja このオブジェクトの初期化を行う。
 boolean reinit(ServiceProfile profile)
          コンシューマクラスの再初期化関数 {@.ja このオブジェクトの再初期化を行う。
 

メソッドの詳細

init

boolean init(RTObject_impl rtobj,
             ServiceProfile profile)
コンシューマクラスの初期化関数

このオブジェクトの初期化を行う。外部からSDOサービスが ServiceProfile とともにアタッチされると、SDOコンシューマがインス タンス化され、その直後に SDO サービスがアタッチされた RTC と与え られた ServiceProfile を引数としてこの関数が呼ばれる。 関数内では、ServiceProfile 内の SDO サービスリファレンスを CorbaConsumer クラス等を利用しオブジェクト内に保持するとともに、 properties から設定内容を読み込みサービス固有の設定等を行う。与 えられたサービスのオブジェクトリファレンスが不正、あるいは properties の内容が不正、等の場合は戻り値に false を返す。

パラメータ:
rtobj - このオブジェクトがインスタンス化された RTC
profile - 外部から与えられた SDO ServiceProfile
戻り値:
与えられた SDO Service や ServiceProfile が不正の場合 false

reinit

boolean reinit(ServiceProfile profile)
コンシューマクラスの再初期化関数

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

パラメータ:
profile - 新たに与えられた SDO ServiceProfile
戻り値:
不正な ServiceProfile が与えられた場合は false

getProfile

ServiceProfile getProfile()
ServiceProfile を返す

init()/reinit()で与えられた ServiceProfile は通常オブジェクト内 で保持される。SDO Service 管理フレームワークは管理上このオブジェ クトに対応する ServiceProfile を必要とするので、この関数では保持 されている ServiceProfile を返す。

戻り値:
このオブジェクトが保持している ServiceProfile

finalize

void finalize()
終了処理

SDOサービスがでタッチされる際に呼び出される終了処理用関数。サー ビスのでタッチに際して、当該オブジェクトが保持するリソースを解放 するなどの処理を行う。