クラス RTC::CorbaPort

RT コンポーネント CORBA provider/consumer 用 Port [詳細]

#include <CorbaPort.h>

RTC::CorbaPortに対する継承グラフ

RTC::PortBase

すべてのメンバ一覧

Public メソッド

 CorbaPort (const char *name)
 コンストラクタ
virtual ~CorbaPort ()
 仮想デストラクタ
bool registerProvider (const char *instance_name, const char *type_name, PortableServer::RefCountServantBase &provider)
 Provider を登録する
bool registerConsumer (const char *instance_name, const char *type_name, CorbaConsumerBase &consumer)
 Consumer を登録する

Protected メソッド

virtual ReturnCode_t publishInterfaces (ConnectorProfile &connector_profile)
 Interface 情報を公開する
virtual ReturnCode_t subscribeInterfaces (const ConnectorProfile &connector_profile)
 Interface に接続する
virtual void unsubscribeInterfaces (const ConnectorProfile &connector_profile)
 Interface への接続を解除する

構成

struct  Consumer
 Consumer の情報を格納する構造体
struct  subscribe
 ConnectorProfile と Consuemr の比較をしオブジェクト参照を セットするための Functor
struct  unsubscribe
 Consumer のオブジェクトを解放するための Functor


説明

RT コンポーネント CORBA provider/consumer 用 Port

CorbaPort は RT コンポーネントにおいて、ユーザ定義の CORBA オブジェクト サービスおよびコンシューマを提供する Port 実装である。

RT コンポーネントは、Port を介してユーザが定義した CORBA サービスを提供 することができ、これを RT Service (Provider) と呼ぶ。 また、他の RT コンポーネントのサービスを利用するための CORBA オブジェクト のプレースホルダを提供することができ、これを RT Service Consumer と呼ぶ。

CorbaPort は任意の数の Provider および Consumer を管理することができ、 Port 同士を接続する際に対応する Provider と Consumer を適切に関連付ける ことができる。

CorbaPort は通常以下のように利用される。

 RTC::CorbaPort m_port0; // Port の宣言

 MyService_impl m_mysvc0; // この Port が提供する Serivce Provider
 RTC::CorbaConsumer<YourService> m_cons0; // この Port の Consumer

 // Service Provider を Port に登録
 m_port0.registerProvider("MyService0", "Generic", m_mysvc0);
 // Service Consumer を Port に登録
 m_port0.registerConsumer("YourService0", "Generic", m_cons0 );

 // connect が行われた後

 m_cons0->your_service_function(); // YourService の関数をコール

 // connect された 別のコンポーネントにおいて
 m_cons1->my_service_function(); // MyService の関数をコール
 

このように、提供したい Service Provider を registerProvider() で登録 することにより、他のコンポーネントから利用可能にし、他方、 利用したい Service Consumer を registerConsumer() で登録することにより 他のコンポーネントの Service をコンポーネント内で利用可能にすることが できる。

から:
0.4.0

コンストラクタとデストラクタ

RTC::CorbaPort::CorbaPort ( const char *  name  ) 

コンストラクタ

引数:
name Port の名前

virtual RTC::CorbaPort::~CorbaPort (  )  [virtual]

仮想デストラクタ


関数

bool RTC::CorbaPort::registerProvider ( const char *  instance_name,
const char *  type_name,
PortableServer::RefCountServantBase &  provider 
)

Provider を登録する

この Port において提供したいサーバントをこの Port に対して登録する。 サーバントは、引数で与えられる instance_name, type_name を、 サーバント自身のインスタンス名およびタイプ名として、サーバントに 関連付けられる。

引数:
instance_name サーバントのインスタンス名
type_name サーバントのタイプ名
provider CORBA サーバント
戻り値:
既に同名の instance_name が登録されていれば false を返す。

bool RTC::CorbaPort::registerConsumer ( const char *  instance_name,
const char *  type_name,
CorbaConsumerBase consumer 
)

Consumer を登録する

この Port が要求するサービスのプレースホルダであるコンシューマ (Consumer) を登録する。 Consumer が関連付けられるサービスのインスタンス名およびタイプ名として、 引数に instance_name, type_name および Consumer 自身を与えることにより、 内部でこれらが関連付けられる。 Port 間の接続 (connect) 時 には、同一の instance_name, type_name を持つ サービスが他の Port から提供 (Provide) されている場合、そのサービスの オブジェクト参照が自動的に Consumer にセットされる。

引数:
instance_name Consumer が要求するサービスのインスタンス名
type_name Consumer が要求するサービスのタイプ名
consumer CORBA サービスコンシューマ
戻り値:
既に同名の instance_name が登録されていれば false を返す。

virtual ReturnCode_t RTC::CorbaPort::publishInterfaces ( ConnectorProfile &  connector_profile  )  [protected, virtual]

Interface 情報を公開する

この Portが所有する Provider に関する情報を ConnectorProfile::properties に代入する。 代入する情報は、NVListの name と value として以下のものが格納される。

ここで、

である。 ConnectorProfile::properties では、これらを .(ドット)表記で、 NameValue のキーとしている。したがって、

  PortInterfaceProfile
  {
    instance_name = "PA10_0";
    type_name     = "Manipulator";
    polarity      = PROVIDED;
  }

ならば、

 NameValue = { "port.Manipulator.PA10_0": <Object reference>=""> }
 

といった値が ConnectorProfile::properties に格納され、他のポートに対して 伝達される。他の Port でこのインターフェースを使用する Consumer が 存在すれば、ConnectorProfile からこのキーからオブジェクトリファレンスを 取得し何らかの形で使用される。

引数:
connector_profile コネクタプロファイル
戻り値:
ReturnCode_t 型のリターンコード

RTC::PortBaseを実装しています。

virtual ReturnCode_t RTC::CorbaPort::subscribeInterfaces ( const ConnectorProfile &  connector_profile  )  [protected, virtual]

Interface に接続する

この Portが所有する Consumer に適合する Provider に関する情報を ConnectorProfile::properties から抽出し Consumer にオブジェクト参照 をセットする。

今、Consumer が

  PortInterfaceProfile
  {
    instance_name = "PA10_0";
    type_name     = "Manipulator";
    polarity      = REQUIRED;
  }
として登録されていれば、他の Port の
  PortInterfaceProfile
  {
    instance_name = "PA10_0";
    type_name     = "Manipulator";
    polarity      = PROVIDED;
  }
 
として登録されている Serivce Provider のオブジェクト参照を探し、 Consumer にセットする。 実際には、ConnectorProfileproperties に
 NameValue = { "port.Manipulator.PA10_0": <Object reference>=""> }
 
として登録されている NameValue を探し、そのオブジェクト参照を Consumer にセットする。

引数:
connector_profile コネクタプロファイル
戻り値:
ReturnCode_t 型のリターンコード

RTC::PortBaseを実装しています。

virtual void RTC::CorbaPort::unsubscribeInterfaces ( const ConnectorProfile &  connector_profile  )  [protected, virtual]

Interface への接続を解除する

与えられた ConnectorProfile に関連する Consumer にセットされた すべての Object を解放し接続を解除する。

引数:
connector_profile コネクタプロファイル

RTC::PortBaseを実装しています。


OpenRTMに対してThu May 29 15:03:27 2008に生成されました。  doxygen 1.5.3