OpenRTM-aist  1.2.1
クラス | 公開メンバ関数 | 限定公開メンバ関数 | 限定公開変数類 | 全メンバ一覧
RTC::CorbaPort クラス

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

#include <CorbaPort.h>

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

公開メンバ関数

 CorbaPort (const char *name)
 コンストラクタ [詳解]
 
virtual ~CorbaPort (void)
 仮想デストラクタ [詳解]
 
void init (coil::Properties &prop)
 プロパティの初期化 [詳解]
 
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 を登録する [詳解]
 
- 基底クラス RTC::PortBase に属する継承公開メンバ関数
 PortBase (const char *name="")
 コンストラクタ [詳解]
 
virtual ~PortBase (void)
 デストラクタ [詳解]
 
virtual PortProfile * get_port_profile () throw (CORBA::SystemException)
 [CORBA interface] PortProfileを取得する [詳解]
 
const PortProfile & getPortProfile () const
 PortProfile を取得する。 [詳解]
 
virtual ConnectorProfileList * get_connector_profiles () throw (CORBA::SystemException)
 [CORBA interface] ConnectorProfileListを取得する [詳解]
 
virtual ConnectorProfile * get_connector_profile (const char *connector_id) throw (CORBA::SystemException)
 [CORBA interface] ConnectorProfile を取得する [詳解]
 
virtual ReturnCode_t connect (ConnectorProfile &connector_profile) throw (CORBA::SystemException)
 [CORBA interface] Port の接続を行う [詳解]
 
virtual ReturnCode_t notify_connect (ConnectorProfile &connector_profile) throw (CORBA::SystemException)
 [CORBA interface] Port の接続通知を行う [詳解]
 
virtual ReturnCode_t disconnect (const char *connector_id) throw (CORBA::SystemException)
 [CORBA interface] Port の接続を解除する [詳解]
 
virtual ReturnCode_t notify_disconnect (const char *connector_id) throw (CORBA::SystemException)
 [CORBA interface] Port の接続解除通知を行う [詳解]
 
virtual ReturnCode_t disconnect_all () throw (CORBA::SystemException)
 [CORBA interface] Port の全接続を解除する [詳解]
 
void setName (const char *name)
 Port の名前を設定する [詳解]
 
const char * getName () const
 Port の名前を取得する [詳解]
 
const PortProfile & getProfile () const
 PortProfileを取得する [詳解]
 
void setPortRef (PortService_ptr port_ref)
 Port のオブジェクト参照を設定する [詳解]
 
PortService_ptr getPortRef () const
 Port のオブジェクト参照を取得する [詳解]
 
void setOwner (RTObject_ptr owner)
 Port の owner の RTObject を指定する [詳解]
 
void setOnPublishInterfaces (ConnectionCallback *on_publish)
 インターフェースを公開する際に呼ばれるコールバックをセットする [詳解]
 
void setOnSubscribeInterfaces (ConnectionCallback *on_subscribe)
 インターフェースを取得する際に呼ばれるコールバックをセットする [詳解]
 
void setOnConnected (ConnectionCallback *on_connected)
 接続完了時に呼ばれるコールバックをセットする [詳解]
 
void setOnUnsubscribeInterfaces (ConnectionCallback *on_subscribe)
 インターフェースを解放する際に呼ばれるコールバックをセットする [詳解]
 
void setOnDisconnected (ConnectionCallback *on_disconnected)
 接続解除に呼ばれるコールバックをセットする [詳解]
 
void setOnConnectionLost (ConnectionCallback *on_connection_lost)
 ポートの接続がロストした場合に呼び出されるコールバックをセットする [詳解]
 
void setPortConnectListenerHolder (PortConnectListeners *portconnListeners)
 PortConnectListeners のホルダをセットする [詳解]
 
virtual DirectPortBasegetDirectPort ()
 direct通信用ポートオブジェクト取得 [詳解]
 

限定公開メンバ関数

virtual ReturnCode_t publishInterfaces (ConnectorProfile &connector_profile)
 Provider Interface 情報を公開する [詳解]
 
virtual ReturnCode_t subscribeInterfaces (const ConnectorProfile &connector_profile)
 Provider Interface 情報を取得する [詳解]
 
virtual void unsubscribeInterfaces (const ConnectorProfile &connector_profile)
 Interface への接続を解除する [詳解]
 
virtual void activateInterfaces ()
 Port の全てのインターフェースを activates する [詳解]
 
virtual void deactivateInterfaces ()
 全ての Port のインターフェースを deactivates する [詳解]
 
- 基底クラス RTC::PortBase に属する継承限定公開メンバ関数
virtual ReturnCode_t connectNext (ConnectorProfile &connector_profile)
 次の Port に対して notify_connect() をコールする [詳解]
 
virtual ReturnCode_t disconnectNext (ConnectorProfile &connector_profile)
 次の Port に対して notify_disconnect() をコールする [詳解]
 
virtual void setConnectionLimit (int limit_value)
 接続の最大数を設定する。 [詳解]
 
virtual ReturnCode_t _publishInterfaces (void)
 Interface情報を公開する [詳解]
 
bool isEmptyId (const ConnectorProfile &connector_profile) const
 ConnectorProfile の connector_id フィールドが空かどうか判定 [詳解]
 
const std::string getUUID () const
 UUIDを生成する [詳解]
 
void setUUID (ConnectorProfile &connector_profile) const
 UUIDを生成し ConnectorProfile にセットする [詳解]
 
bool isExistingConnId (const char *id)
 id が既存の ConnectorProfile のものかどうか判定する [詳解]
 
ConnectorProfile findConnProfile (const char *id)
 id を持つ ConnectorProfile を探す [詳解]
 
CORBA::Long findConnProfileIndex (const char *id)
 id を持つ ConnectorProfile を探す [詳解]
 
void updateConnectorProfile (const ConnectorProfile &connector_profile)
 ConnectorProfile の追加もしくは更新 [詳解]
 
bool eraseConnectorProfile (const char *id)
 ConnectorProfile を削除する [詳解]
 
bool appendInterface (const char *name, const char *type_name, PortInterfacePolarity pol)
 PortInterfaceProfile に インターフェースを登録する [詳解]
 
bool deleteInterface (const char *name, PortInterfacePolarity pol)
 PortInterfaceProfile からインターフェース登録を削除する [詳解]
 
template<class ValueType >
void addProperty (const char *key, ValueType value)
 PortProfile の properties に NameValue 値を追加する [詳解]
 
void appendProperty (const char *key, const char *value)
 PortProfile の properties に NameValue 値を要素に追加する [詳解]
 
void updateConnectors ()
 存在しないポートをdisconnectする。 [詳解]
 
bool checkPorts (::RTC::PortServiceList &ports)
 ポートの存在を確認する。 [詳解]
 
void onNotifyConnect (const char *portname, RTC::ConnectorProfile &profile)
 
void onNotifyDisconnect (const char *portname, RTC::ConnectorProfile &profile)
 
void onUnsubscribeInterfaces (const char *portname, RTC::ConnectorProfile &profile)
 
void onPublishInterfaces (const char *portname, RTC::ConnectorProfile &profile, ReturnCode_t ret)
 
void onConnectNextport (const char *portname, RTC::ConnectorProfile &profile, ReturnCode_t ret)
 
void onSubscribeInterfaces (const char *portname, RTC::ConnectorProfile &profile, ReturnCode_t ret)
 
void onConnected (const char *portname, RTC::ConnectorProfile &profile, ReturnCode_t ret)
 
void onDisconnectNextport (const char *portname, RTC::ConnectorProfile &profile, ReturnCode_t ret)
 
void onDisconnected (const char *portname, RTC::ConnectorProfile &profile, ReturnCode_t ret)
 

限定公開変数類

coil::Properties m_properties
 プロパティ [詳解]
 
- 基底クラス RTC::PortBase に属する継承限定公開変数類
coil::Properties m_properties
 プロパティ [詳解]
 
Logger rtclog
 ロガーストリーム [詳解]
 
PortProfile m_profile
 Port の PortProfile. [詳解]
 
RTC::PortService_var m_objref
 Port の オブジェクト参照 [詳解]
 
coil::Mutex m_profile_mutex
 PortProfile の mutex. [詳解]
 
coil::Mutex m_connectorsMutex
 
std::string m_ownerInstanceName
 インスタンス名 [詳解]
 
int m_connectionLimit
 Port の接続の最大数 [詳解]
 
ConnectionCallbackm_onPublishInterfaces
 Callback functor オブジェクト [詳解]
 
ConnectionCallbackm_onSubscribeInterfaces
 Callback functor オブジェクト [詳解]
 
ConnectionCallbackm_onConnected
 Callback functor オブジェクト [詳解]
 
ConnectionCallbackm_onUnsubscribeInterfaces
 Callback functor オブジェクト [詳解]
 
ConnectionCallbackm_onDisconnected
 Callback functor オブジェクト [詳解]
 
ConnectionCallbackm_onConnectionLost
 Callback functor オブジェクト [詳解]
 
PortConnectListenersm_portconnListeners
 PortConnectListenerホルダ [詳解]
 
DirectPortBasem_directport
 

その他の継承メンバ

- 基底クラス RTC::PortBase に属する継承限定公開型
typedef coil::Guard< coil::MutexGuard
 

詳解

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 をコンポーネント内で利用可能にすること ができる。

PortInterfaceProfile は Port に所属するプロバイダもしくはコンシュー マインターフェースについての情報を記述するためのプロファイルである。 接続を行うツール等は、これらの情報に基づき ConnectorProfile を適切 に生成し、接続を構成する Port のうち任意の一つに対して引数に ConnectorProfile を与えて Port::connect() を呼び出す必要がある。

なお、PortInterfaceProfile のインスタンス名 "*" は特殊なインスタン スを表す。

PROVIDEDすなわちプロバイダのインスタンス名が "*" の場合は、接続開 始時点ではインスタンスが存在せず、コンシューマの要求に応じて動的に インスタンスを生成するタイプのプロバイダであることを表す。したがっ て、接続開始時点ではインスタンス名は存在しないが、接続シーケンス中 のインターフェースを公開するプロセスにおいて、プロバイダは生成した インスタンスに対応した記述子を ConnectorProfile に適正に設定するも のとする。(未実装)

REQUIREDすなわちコンシューマのインスタンス名が "*" の場合は、一つ のコンシューマが複数のプロバイダと接続可能なタイプのコンシューマで あることを示す。(未実装)

以下は、Port間のインターフェースを接続するために ConnectorProfile に マッピングを記述するためのルールを示す。

Portに付属するインターフェースの指定子のフォーマットを以下のように 定める。インターフェースに関するプロパティが以下の場合

インターフェースの指定子を以下の文字列名称で指定するものとする。

<rtc_iname>.port.<port_name>.<if_polarity>.<if_tname>.<if_iname>

PROVIDED(提供)型すなわちプロバイダのインタフェースのプロパティが以 下の場合、

インターフェース指定子は

MyComp0.port.myservice.provided.echo_interface.echo_interface2

のように記述される。また、同様にREQUIRED(要求)型すなわちコンシュー マのインターフェースのプロパティが以下の場合、

インターフェース指定子は、

YourComp0.port.myservice.required.hoge_interface.hoge_inteface1

のように記述することができる。

なお、ここで動的生成インターフェースのインスタンスのための特殊なタ イプのインスタンス名記述子

を定義する。動的生成インターフェースとは、接続時にインスタンスが生 成されるタイプのインターフェースである。(未実装)

コンシューマが要求するプロバイダインターフェース記述子に動的生成型 インスタンス名記述子 "<type_name>*" が指定された場合、プロバイダは インスタンスを1つ新規に生成する。"<type_name>*" の記述子によりプロバ イダを要求する n 個のコンシューマが存在する場合、これらからの要求 (オペレーションコール)を1 つのプロバイダにより処理する関係を構築す る(下図)。

consumer0 ]---<
consumer1 ]---<  O----[ provider0
consumer2 ]---<

これに対し、コンシューマが要求するプロバイダインターフェース記述子 にインクリメンタル生成型インスタンス名記述子 "<type_name>+" が指定 された場合、記述子 "<type_name>+" の数だけプロバイダのインスタン スが動的に生成される。すなわち、"<type_name>+" の記述子によりプロバ イダを要求する n 個のコンシューマが存在する場合、n 個のプロバイダ がそれぞれの要求を処理する以下のような関係が構築される。

consumer0 ]---<  O----[ provider0
consumer1 ]---<  O----[ provider1
consumer2 ]---<  O----[ provider2

接続に際して、ツール等から ConnectorProfile::properties に適切なイ ンターフェースマッピング指定を記述することで、相互のプロバイダ/コ ンシューマインターフェースを自由に接続することができる。ただし、接 続に関わる RTC の中に、異なるインスタンスでありながら、同一のインス タンス名が存在する場合、インターフェース記述子の一意性が保証できな いので、この方法による接続性は保証されない。

ここでインターフェース記述子を簡単のために <if_desc0>, <if_desc1>, ... とする。また、ConnectorProfile::properties の NVListの key と value を key: value のように記述するものとする。

いま、2つのコンポーネントのサービスポートを接続する場合を考える。 それぞれのコンポーネントのサービスポートが以下の場合、

     MyComp0                                 YourComp0
    _______ mycomp_service   yourcomp_service ______
           |                                 |
         |~~~|---O echo0         echo9 >---|~~~|
         |   |---< add0          add9  O---|   |
          ~T~                               ~T~
           |                                 |

MyComp0 の echo0 (プロバイダ) と YourComp0 の echo9 (コンシューマ)、 MyComp0 の add0 (コンシューマ) と YourComp0 の echo9 (プロバイダ) をそれぞれ対にして接続させるものと仮定する。この場合、 ConnectorProfile は以下のように設定する。

ConnectorProfile:
  name: 任意のコネクタ名
  connector_id: 空文字
  ports[]: mycomp_service の参照, yourcomp_service の参照
  properties:
    <add0>: <add9>
    <echo9>: <echo0>

ただし、それぞれ

<add0> は MyComp0.port.mycomp_service.required.add.add0
<add9> は YourComp0.port.yourcomp_service.provided.add.add9
<echo0> は MyComp0.port.mycomp_service.provided.echo.echo0
<echo9> は YourComp0.port.yourcomp_service.required.echo.echo9

である。接続プロセスにおいて、各ポートのプロバイダおよびコンシュー マは、それぞれ以下の作業を、CorbaPort::publishInterfaces(), CorbaPort::PortsubscribeInterfaces() 仮想関数において行う。

プロバイダは、publishInterfaces() 関数において、自分のインターフェー ス記述子をキーとし、値にIORの文字列表記したものを ConnectorProfile::properties に設定する。前提として、このインター フェース記述子は今行おうとしているコネクタにおいては一意であるため、 同じキーは1つしか存在してはいけない。

[この部分の記述は未実装の機能] なお、動的生成インターフェースにつ いては、以下の手続きに従い処理することとなる。publishInterface() 関数において、動的生成インスタンス名記述子 "<type_name>*" または、 インクリメンタル生成型インスタンス名記述子 "<type_name>+" が存在す るかどうかを走査する。動的生成インスタンス名記述子 "<type_name>*" が存在する場合、プロバイダのインスタンスを1つ生成し、そのインター フェース指定子を key に、IOR文字列を value に設定するとともに、動 的生成インスタンス名記述子 "<type_name>*" を value に含むすべての value 上のインターフェース指定子を、ここで生成したインターフェース 指定子に置き換える。

インクリメンタル生成型インスタンス名記述子"<type_name>+" が存在す る場合、インスタンス名記述子の数だけプロバイダのインスタンスを生成 し、それぞれのインターフェース指定子をkey に、IOR文字列を value に 設定するとともに、インクリメンタル生成型インスタンス名記述子 "<type_name>+" を value 含むすべての value 上のインターフェース指 定子に対して順に、ここで生成したそれぞれのインターフェース指定子に 置き換える。

プロバイダは subscribeInterfaces() では特に操作は行わない。

コンシューマは、 publishInterfaces() においては特に操作を行わない。

一方、 subscribeInterfaces() では、自分の記述子を key とする key-value ペア が存在するかどうか調べ、もし存在すれば、その value に設定されたプロバイダのインターフェース指定子で指定される参照を、 さらに ConnectorProfile::properties から探し、それをコンシューマの 接続先として設定する。なお、意図的にコンシューマにプロバイダの参照 を設定しない場合は、予約文字列 "nil" または "null" を設定するもの とする。

コンシューマは、もし自分の記述子が存在しない場合、またはプロバイダ の参照が Connector::properties に存在しない場合、コンシューマは、 自分のインスタンス名および型名と同一のプロバイダを探し、その参照を 自分自身に設定する。これは、OpenRTM-aist-0.4 との互換性を保持する ためのルールであり、1.0以降では推奨されない。

プロバイダ対コンシューマの対応は一対一である必要はなく、プロバイダ 1 に対して、コンシューマ n、またはコンシューマ 1 に対してプロバイ ダ n のケースも許される。プロバイダ 1 に対して、コンシューマ n の ケースでは、あるプロバイダの指定子が、複数のコンシューマに対して、 上記の方法で指定されることにより、実現される。一方、コンシューマ 1 に対してプロバイダ n のケースでは、コンシューマ指定子の key に対 して、複数のプロバイダの指定子がカンマ区切りで列挙される形式となる ものとする。

なお、インターフェースの対応関係の厳密さを指定するオプションとして、 以下のオプションを指定することができる。

port.connection.strictness: strict, best_effort

strict: すべてのコンシューマに指定した参照が存在し、かつナローイン グにも成功しコンシューマに適切にセットできた場合にのみ Port 間の接続を確立する。

best_effort: ナローイング等に失敗した場合でも、エラーを返すことな く Port 間の接続を確立する。

から
0.4.0

構築子と解体子

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

コンストラクタ

コンストラクタでは、引数に与えられた名前を PortBase に対してセッ トするとともに、PortProfile::properties に対して

  • port.port_type: "CorbaPort"

をプロパティとして追加する。

引数
namePort の名前
virtual RTC::CorbaPort::~CorbaPort ( void  )
virtual

仮想デストラクタ

関数詳解

virtual void RTC::CorbaPort::activateInterfaces ( )
protectedvirtual

Port の全てのインターフェースを activates する

Port に登録されている全てのインターフェースを activate する。

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

virtual void RTC::CorbaPort::deactivateInterfaces ( )
protectedvirtual

全ての Port のインターフェースを deactivates する

Port に登録されている全てのインターフェースを deactivate する。

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

void RTC::CorbaPort::init ( coil::Properties prop)

プロパティの初期化

OutPortのプロパティを初期化する。このポートへの接続数を指定する プロパティ "connection_limit" が含まれ、適切な数値が設定されてい る場合、最大接続数としてその数値が設定される。プロパティが設定さ れていない場合、もしくは適切な値が設定されていない場合には、最大 接続数は無制限となる。

引数
propCorbaPort のプロパティ
virtual ReturnCode_t RTC::CorbaPort::publishInterfaces ( ConnectorProfile &  connector_profile)
protectedvirtual

Provider Interface 情報を公開する

この Port が所有する Provider インターフェースに関する情報を ConnectorProfile::properties に代入し他の Port に対して公開する。 今、RTCのインスタンス名等の情報が以下の通りであるとして、

  • RTCインスタンス名: rtc_iname
  • ポート名: port_name
  • インターフェース極性: if_polarity
  • インターフェース型名: if_tname
  • インターフェースインスタンス名: if_iname

NameValue 型の ConnectorProfile::properties の name と value として 以下のものが格納される。

  • name <rtc_iname>.port.<port_name>.provided.<if_tname>.<if_iname>
  • value Provider インターフェースの IOR 文字列

なお、旧バージョンとの互換性のため以下の表記の NameValue も同時 に格納されるが、将来のバージョンでは削除される可能性がある。

  • name port.<if_tname>.<if_iname>
  • value Provider インターフェースの IOR 文字列

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

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

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

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) 時 には、subscribeInterfaces() で述 べられているルールに基づき、Provider Interface の参照が自動的に Consumer にセットされる。

引数
instance_nameConsumer が要求するサービスのインスタンス名
type_nameConsumer が要求するサービスのタイプ名
consumerCORBA サービスコンシューマ
戻り値
既に同名の instance_name が登録されていれば false を返す。
bool RTC::CorbaPort::registerProvider ( const char *  instance_name,
const char *  type_name,
PortableServer::RefCountServantBase &  provider 
)

Provider を登録する

この Port において提供したいサーバントをこの Port に対して登録す る。サーバントは、引数で与えられる instance_name, type_name を、 サーバント自身のインスタンス名およびタイプ名として、サーバントに 関連付けられる。この関数により、サーバントは CorbaPort 内部に保 持されるとともに、PortInterfaceProfile にRTC::PROVIDED インター フェースとして登録される。

引数
instance_nameサーバントのインスタンス名
type_nameサーバントのタイプ名
providerCORBA サーバント
戻り値
既に同名の instance_name が登録されていれば false を返す。
virtual ReturnCode_t RTC::CorbaPort::subscribeInterfaces ( const ConnectorProfile &  connector_profile)
protectedvirtual

Provider Interface 情報を取得する

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

今、RTC のインスタンス名や Consumer Interface 等の情報が以下のと おりであると仮定すると、

  • RTCインスタンス名: rtc_iname
  • ポート名: port_name
  • インターフェース極性: if_polarity
  • インターフェース型名: if_tname
  • インターフェースインスタンス名: if_iname

この Consumer Interface を表すインターフェース指定子は以下のよう に表される。

<rtc_iname>.port.<port_name>.required.<if_tname>.<if_iname>

この関数は、まず引数 ConnectorProfile::properties に上記インター フェース指定子をキーとして格納されている Provider Interface 指定 子を探し出す。さらに、その Provider Interface 指定子をキーとして 格納されている Provider Interface の参照を表す IOR 文字列を取得 し、Consumer Interface にセットする。

今、仮に、Provider を prov(n), その参照をIOR(n) さらに Consumer をcons(n) のように記述し、これらすべてのインターフェースの型が同 一であり、ConnectorProfile に以下の値が設定されているとする。

ConnectorProfile::properties =
{
  prov0: IOR0,
  prov1: IOR1,
  prov2: IOR2,
  cons0: prov2,
  cons1: prov1,
  cons2: prov0
}

このとき、cons(0..2) にはそれぞれ、参照が以下のようにセットされる。

  cons0 = IOR2
  cons1 = IOR1
  cons2 = IOR0

なお、旧バージョンとの互換性のため、 ConnectorProfile::properties に Consumer Interface をキーとした 値がセットされていない場合でも、次のルールが適用される。

今、仮に Consumer Interface が

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

として登録されていれば、他の Port の

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

として登録されている Serivce Provider のオブジェクト参照を探し、 Consumer にセットする。実際には、ConnectorProfile::properties に

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

として登録されている NameValue を探し、そのオブジェクト参照を Consumer にセットする。

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

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

virtual void RTC::CorbaPort::unsubscribeInterfaces ( const ConnectorProfile &  connector_profile)
protectedvirtual

Interface への接続を解除する

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

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

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

メンバ詳解

coil::Properties RTC::CorbaPort::m_properties
protected

プロパティ


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