SdoServiceProviderBase.py
Go to the documentation of this file.
00001 #!/usr/bin/env python
00002 # -*- coding: euc-jp -*-
00003 
00004 ##
00005 # @file SdoServiceProviderBase.py
00006 # @brief SDO service provider base class and its factory
00007 # @date $Date$
00008 # @author Noriaki Ando <n-ando@aist.go.jp> and Shinji Kurihara
00009 #
00010 # Copyright (C) 2011
00011 #     Noriaki Ando
00012 #     Intelligent Systems Research Institute,
00013 #     National Institute of
00014 #         Advanced Industrial Science and Technology (AIST), Japan
00015 #     All rights reserved.
00016 
00017 
00018 import RTC
00019 import OpenRTM_aist
00020 import SDOPackage, SDOPackage__POA
00021 
00022 
00023 ##
00024 # @if jp
00025 #
00026 # @brief SdoServiceProvider 基底クラス
00027 #
00028 # SDOで定義されているSDOサービスのプロバイダを実装するための基底クラ
00029 # ス。SDOサービスには、外部から提供サービスをRTC(SDO)側で利用する
00030 # SDOサービスコンシューマと、RTC(SDO)自身がSDOサービスを提供するSDO
00031 # サービスプロバイダがある。すべてのSDOサービスプロバイダはこの基底
00032 # クラスを継承して実装される。
00033 #
00034 # このオブジェクトのライフサイクルは以下の通り。
00035 #
00036 # -# マネージャに対してロードされるとモジュール初期化関数によりオブ
00037 #    ジェクトファクトリが、SdoServiceProviderFactory に対して登録さ
00038 #    れる。登録のキーにはサービスインターフェースの IFR (interface
00039 #    repository) ID が利用され、これによりサービスが区別される。
00040 # -# rtc.conf等のコンフィギュレーション指定により、有効化することが
00041 #    指定されているサービスインプロバイダは、RTCの起動と同時にインス
00042 #    タンス化される。
00043 # -# インスタンス化後、初期化関数 init() が呼ばれる。引数には当該サー
00044 #    ビスのためのコンフィギュレーションオプションが Propertyに
00045 #    より渡される。
00046 # -# インスタンス化されたSDOサービスプロバイダは
00047 #    SDO.get_sdo_service() により外部からアクセスされる。このと
00048 #    き、サービスを指定するIDはIFR IDと同じである。このときのアタッ
00049 #    チシーケンスは以下の通り。
00050 # -# RTCがfinalizeされ解体されると同時にSDOサービスプロバイダも解体
00051 #    されるが、その際にはSdoServiceProviderBase.finalize()がコール
00052 #    されるので、ここでリソースの解放など終了処理を行う。
00053 #
00054 # <pre>
00055 # 
00056 #   [RTC]      [SDO service]               [Other]
00057 #     |              :                        |
00058 #     | instantiate  :                        |
00059 #     |------------->:                        |
00060 #     |    init()    |                        |
00061 #     |------------->|                        |
00062 #     |              | get_service_profiles() |
00063 #     |<--------------------------------------|
00064 #     |              |    get_sdo_service()   |
00065 #     |<--------------------------------------|
00066 #     |              |        use service     |
00067 #     |              |<-----------------------|
00068 #     |              |                        |
00069 #     |  finalize()  |                        |
00070 #     |------------->x                        |
00071 #     x              x                        |
00072 #
00073 # </pre>
00074 #
00075 # このクラスの実装に当たっては、少なくとも以下の純粋仮想関数を実装す
00076 # る必要がある。
00077 #
00078 # - init(): 初期化関数。与えられた RTObject および ServiceProfile か
00079 #   ら、当該オブジェクトを初期化する。
00080 # - reinit(): 再初期化関数。ServiceProfile は設定情報更新のため同一
00081 #   IDで呼び出されることが有るが、その際にこの関数が新たな
00082 #   ServiceProfile とともに呼び出される。関数内では、設定の変更など
00083 #   再初期化処理を実装する。
00084 # - getProfile(): 設定されたプロファイルを返す関数。
00085 # - finalize(): 終了処理。コンシューマがデタッチされる際に呼び出され
00086 #   る関数。関数内では終了処理を実装する。
00087 #
00088 # SdoServiceProviderのエントリポイントは通常、ファイル名の basename + "Init" 
00089 # にしておく。以下に、クラス名、ファイル
00090 # 名、エントリポイント関数名の推奨例を示す。
00091 #
00092 # - 実装クラス名: MySdoServiceProvider
00093 # - ファイル名: MySdoServiceProvider.py
00094 # - エントリポイント関数名: MySdoServiceProviderInit()
00095 #
00096 # エントリポイント関数は通常以下のように、SdoServiceProviderFactory
00097 # に当該コンシューマのファクトリ (と解体ファンクタ) を登録する以下の
00098 # ような関数になる。
00099 #
00100 # <pre>
00101 #   def MySdoServiceProviderInit(mgr=None):
00102 #     factory = OpenRTM_aist.SdoServiceProviderFactory.instance()
00103 #     factory.addFactory(OpenRTM.MySdoService._NP_RepositoryId,
00104 #                        MySdoServiceProvider,
00105 #                        OpenRTM_aist.Delete)
00106 #     return
00107 # </pre>
00108 # 
00109 # @else
00110 #
00111 # @endif
00112 #
00113 class SdoServiceProviderBase(SDOPackage__POA.SDOService):
00114   """
00115   """
00116 
00117   ##
00118   # @if jp
00119   # @brief 仮想デストラクタ
00120   # @else
00121   # @brief virtual destructor
00122   # @endif
00123   def __del__(self):
00124     pass
00125 
00126   ##
00127   # @if jp
00128   # @brief コンシューマクラスの初期化関数
00129   #
00130   # このオブジェクトの初期化を行う。外部からSDOサービスが
00131   # ServiceProfile とともにアタッチされると、SDOコンシューマがインス
00132   # タンス化され、その直後に SDO サービスがアタッチされた RTC と与え
00133   # られた ServiceProfile を引数としてこの関数が呼ばれる。
00134   #
00135   # 関数内では、ServiceProfile 内の SDO サービスリファレンスを
00136   # CorbaProvider クラス等を利用しオブジェクト内に保持するとともに、
00137   # properties から設定内容を読み込みサービス固有の設定等を行う。与
00138   # えられたサービスのオブジェクトリファレンスが不正、あるいは
00139   # properties の内容が不正、等の場合は戻り値に false を返す。
00140   #
00141   # @param rtobj このオブジェクトがインスタンス化された RTC
00142   # @param profile 外部から与えられた SDO ServiceProfile
00143   # @return 与えられた SDO Service や ServiceProfile が不正の場合 false
00144   #
00145   # @else
00146   # @brief Initialization function of the consumer class
00147   #
00148   # @endif
00149   # virtual bool init(RTObject_impl& rtobj,
00150   #                   const SDOPackage::ServiceProfile& profile) = 0;
00151   def init(self, rtobj, profile):
00152     pass
00153 
00154 
00155   ##
00156   # @if jp
00157   # @brief コンシューマクラスの再初期化関数
00158   #
00159   # このオブジェクトの再初期化を行う。ServiceProfile には id フィー
00160   # ルドにセッション固有の UUID がセットされているが、同一の id の場
00161   # 合、properties に設定された設定情報の変更や、service フィールド
00162   # のサービスの参照の変更が行われる。その際に呼ばれるのがこの
00163   # reinit() 関数である。実装では、service フィールドのオブジェクト
00164   # リファレンスの同一性を確認し、異なっている場合保持しているリファ
00165   # レンスを更新する必要がある。また properties には新たな設定が与え
00166   # られている可能性があるので、内容を読み込み設定を更新する。
00167   #
00168   # @param profile 新たに与えられた SDO ServiceProfile
00169   # @return 不正な ServiceProfile が与えられた場合は false
00170   #
00171   # @else
00172   # @brief Reinitialization function of the consumer class
00173   #
00174   # @endif
00175   # virtual bool reinit(const SDOPackage::ServiceProfile& profile) = 0;
00176   def reinit(self, profile):
00177     pass
00178 
00179 
00180   ##
00181   # @if jp
00182   # @brief ServiceProfile を返す
00183   #
00184   # init()/reinit()で与えられた ServiceProfile は通常オブジェクト内
00185   # で保持される。SDO Service 管理フレームワークは管理上このオブジェ
00186   # クトに対応する ServiceProfile を必要とするので、この関数では保持
00187   # されている ServiceProfile を返す。
00188   # 
00189   # @return このオブジェクトが保持している ServiceProfile
00190   #
00191   # @else
00192   # @brief Getting ServiceProfile
00193   # @endif
00194   # virtual const SDOPackage::ServiceProfile& getProfile() const = 0;
00195   def getProfile(self):
00196     pass
00197 
00198 
00199   ##
00200   # @if jp
00201   # @brief 終了処理
00202   #
00203   # SDOサービスがでタッチされる際に呼び出される終了処理用関数。サー
00204   # ビスのでタッチに際して、当該オブジェクトが保持するリソースを解放
00205   # するなどの処理を行う。
00206   #
00207   # @else
00208   # @brief Finalization
00209   #
00210   # @endif
00211   # virtual void finalize() = 0;
00212   def finalize(self):
00213     pass
00214 
00215 
00216 sdoserviceproviderfactory = None
00217   
00218 ##
00219 # @if jp
00220 # @brief SdoServiceProviderFactory の typedef
00221 # @else
00222 # @brief typedef of sdoServiceProviderFactory
00223 # @endif
00224 # typedef ::coil::GlobalFactory<
00225 # ::RTC::SdoServiceProviderBase > SdoServiceProviderFactory;
00226 class SdoServiceProviderFactory(OpenRTM_aist.Factory,SdoServiceProviderBase):
00227   def __init__(self):
00228     OpenRTM_aist.Factory.__init__(self)
00229     return
00230 
00231   def __del__(self):
00232     pass
00233 
00234   def instance():
00235     global sdoserviceproviderfactory
00236 
00237     if sdoserviceproviderfactory is None:
00238       sdoserviceproviderfactory = SdoServiceProviderFactory()
00239 
00240     return sdoserviceproviderfactory
00241 
00242   instance = staticmethod(instance)
00243 


openrtm_aist_python
Author(s): Shinji Kurihara
autogenerated on Thu Aug 27 2015 14:17:28