OpenRTM-aist-Python 1.1.2
公開メンバ関数 | 全メンバ一覧
OpenRTM_aist.LocalServiceBase.LocalServiceBase クラス

LocalService 基底クラス [詳解]

OpenRTM_aist.LocalServiceBase.LocalServiceBase の継承関係図
OpenRTM_aist.LocalServiceBase.LocalServiceFactory

公開メンバ関数

def init (self, props)
 LocalServiceクラスの初期化関数 [詳解]
 
def reinit (self, props)
 LocalServiceクラスの再初期化関数 [詳解]
 
def getProfile (self)
 LocalServiceProfile を返す [詳解]
 
def finalize (self)
 終了処理 [詳解]
 

詳解

LocalService 基底クラス

Local Service とは RT-Middlewareのマネージャデーモン内で各種サービ スを提供するための仕組みである。Local Serviceにはいくつかのユース ケースが考えられる。

  1. RTCの内部ロジックに対してサービスを提供する。コンポーネントの開 発者は、一定の艇順を経て、Local Serviceのインスタンスへの参照を得 て、このサービスを利用することができる。
  2. マネージャ等に機能を追加するためのサービス。たとえは、RTCの名前 を登録するCORBAネームサービスの代わりに、新たなディレクトリサービ スやブロードキャストによる名前通知機能などを新たな機能をマネージャ に追加するために利用することができる。マネージャには、様々なアクショ ンに対するフックが用意されており、これを利用することで、マネージャ の様々なイベントに対してアクションを起こすことができる。
  3. マネージャは自身のサービス以外に付加的に外部に対してサービスを 提供する機能を有する。外部からCORBA経由で、ローカルの機能、たとえ ばデバイスやリソースのマネジメント機能に対してアクセスする方法を提 供する。サービスのインスタンス化後に、マネージャに対して、マネージャ サービスとして登録することで、外部からのアクセスを受け付けることが できるようになる。

Local Service はモジュールとしてロードされ、通常唯一のインスタンス が生成される。すなわち、LocalService はシングルトンとして実装され る。インスタンス化されたサービスはサービスリストに登録され、RTC等 からは名前やUUIDによってインスタンスの参照を入手することができる。

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

  1. オブジェクトは通常、共有オブジェクト (so, DLL) としてコンパイル・ リンクされる。
  2. マネージャに対してロードされるとモジュール初期化関数によりオブ ジェクトファクトリが、LocalServiceFactory に対して登録される。 登録のキーにはUUIDと名前が利用され、これによりサービスが区別さ れる。
  3. rtc.conf等のコンフィギュレーション指定により、有効化することが 指定されているサービスインプロバイダは、RTCの起動と同時にインス タンス化される。
  4. インスタンス化後、初期化関数 init() が呼ばれる。引数には当該サー ビスのためのコンフィギュレーションオプションが coil::Propertyに より渡される。
  5. マネージャサービスオペレーション reinit が呼ばれると、すべての Local Service お reinit が呼び出され、更新されたコンフィギュレー ション情報が読み込まれる。
  6. マネージャ解体時には、すべての Local Service の finalizeが呼び 出され、解体されるので、ここでリソースの解放など終了処理を行 う。

このクラスの実装に当たっては、少なくとも以下の純粋仮想関数を実装す る必要がある。

LocalService は通常共有オブジェクトとしてコンパイル・リンク される。共有オブジェクトのエントリポイントは通常コンパイルされたファ イル名の basename + "Init" にしておく。以下に、クラス名、ファイル 名、エントリポイント関数名の推奨例を示す。

エントリポイント関数は通常以下のように、LocalServiceFactory に当該コンシューマのファクトリ (と解体ファンクタ) を登録する以下の ような関数になる。

 extern "C"
 {
   void MyLocalServiceInit()
   {
     RTC::LocalServiceFactory& factory
       = RTC::LocalServiceFactory::instance();
     factory.addFactory(::RTC::MyLocalSerivce::name,
                        ::coil::Creator< ::RTC::LocalServiceBase,
                        ::RTC::MyLocalService>,
                        ::coil::Destructor< ::RTC::LocalServiceBase,
                        ::RTC::MyLocalService>);
   }
 };
 
 

メソッド詳解

def OpenRTM_aist.LocalServiceBase.LocalServiceBase.finalize (   self)

終了処理

LocalService が終了する際に呼び出される終了処理用関数。当該オブ ジェクトが保持するリソースを解放するなどの処理を行う。

virtual void finalize() = 0;

def OpenRTM_aist.LocalServiceBase.LocalServiceBase.getProfile (   self)

LocalServiceProfile を返す

init()/reinit()で与えられた LocalServiceProfile は通常オブジェク ト内で保持される。この関数では保持されている ServiceProfile を返 す。

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

virtual const LocalServiceProfile& getProfile() const = 0;

def OpenRTM_aist.LocalServiceBase.LocalServiceBase.init (   self,
  props 
)

LocalServiceクラスの初期化関数

このオブジェクトの初期化を行う。LocalService を実装する場合、外 部からの設定情報は、このinit()関数により与えられる。

引数
profile外部から与えられた LocalServiceProfile
戻り値
与えられた LocalServiceProfile が不正の場合 false

virtual bool init(const coil::Properties& props) = 0;

def OpenRTM_aist.LocalServiceBase.LocalServiceBase.reinit (   self,
  props 
)

LocalServiceクラスの再初期化関数

TODO: ドキュメント作成

引数
profile新たに与えられた LocalServiceProfile
戻り値
不正な LocalServiceProfile が与えられた場合は false

virtual bool reinit(const coil::Properties& props) = 0;


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