20#ifndef RTC_CORBAPORT_H
21#define RTC_CORBAPORT_H
736 PortableServer::RefCountServantBase& provider);
1076 class CorbaConsumerHolder;
1107 virtual bool findProvider(
const NVList& nv, CorbaConsumerHolder& cons,
1108 std::string& iorstr);
1144 virtual bool findProviderOld(
const NVList&nv, CorbaConsumerHolder& cons,
1145 std::string& iorstr);
1174 bool setObject(
const std::string& ior, CorbaConsumerHolder& cons);
1202 bool releaseObject(
const std::string& ior, CorbaConsumerHolder& cons);
1220 class CorbaProviderHolder
1223 CorbaProviderHolder(
const char* type_name,
1224 const char* instance_name,
1225 PortableServer::RefCountServantBase* servant)
1226 : m_typeName(type_name),
1227 m_instanceName(instance_name),
1232#ifdef ORB_IS_OMNIORB
1234 m_poa->activate_object(m_servant);
1238 m_oid = m_poa->servant_to_id(m_servant);
1241 m_poa->activate_object_with_id(m_oid, m_servant);
1246 CORBA::Object_var obj;
1247 obj = m_poa->id_to_reference(m_oid);
1249 CORBA::String_var ior_var = orb->object_to_string(obj);
1256 m_oid = poa->servant_to_id(m_servant);
1257 CORBA::Object_var obj;
1258 obj = CORBA::Object_var(m_servant->__this());
1260 CORBA::String_var ior_var = orb->object_to_string(obj);
1264 virtual ~CorbaProviderHolder()
1268 std::string instanceName() {
return m_instanceName; }
1269 std::string typeName() {
return m_typeName; }
1270 std::string ior() {
return m_ior; }
1271 std::string descriptor() {
return m_typeName +
"." + m_instanceName; }
1277 m_poa->activate_object_with_id(m_oid, m_servant);
1279 catch(const ::PortableServer::POA::ServantAlreadyActive &)
1290 m_poa->deactivate_object(m_oid);
1297 std::string m_typeName;
1298 std::string m_instanceName;
1299 PortableServer::RefCountServantBase* m_servant;
1300 PortableServer::ObjectId_var m_oid;
1302 PortableServer::POA_var m_poa;
1312 using CorbaProviderList = std::vector<CorbaProviderHolder>;
1313 CorbaProviderList m_providers;
1322 class CorbaConsumerHolder
1325 CorbaConsumerHolder(
const char* type_name,
1326 const char* instance_name,
1327 CorbaConsumerBase* consumer)
1328 : m_typeName(type_name),
1329 m_instanceName(instance_name),
1330 m_consumer(consumer),
1334 ~CorbaConsumerHolder();
1335 std::string instanceName() {
return m_instanceName; }
1336 std::string typeName() {
return m_typeName; }
1337 std::string descriptor() {
return m_typeName +
"." + m_instanceName; }
1339 bool setObject(
const char* ior)
1343 CORBA::Object_var obj = orb->string_to_object(ior);
1344 if (CORBA::is_nil(obj))
1349 return m_consumer->setObject(obj.in());
1351 void releaseObject()
1353 m_consumer->releaseObject();
1355 const std::string& getIor()
1360 std::string m_typeName;
1361 std::string m_instanceName;
1362 CorbaConsumerBase* m_consumer;
1365 using CorbaConsumerList = std::vector<CorbaConsumerHolder>;
1366 CorbaConsumerList m_consumers;
1378 explicit unsubscribe(CorbaConsumerList& consumers)
1379 : m_consumers(consumers)
1383 void operator()(
const SDOPackage::NameValue& nv)
1385 for (
auto & consumer : m_consumers)
1387 if (consumer.descriptor() ==
static_cast<const char*
>(nv.name))
1389 consumer.releaseObject();
1393 CorbaConsumerList& m_consumers;
NameValue and NVList utility functions
オブジェクトリファレンスを保持するプレースホルダ基底クラス
Definition: CorbaConsumer.h:84
RT コンポーネント CORBA provider/consumer 用 Port
Definition: CorbaPort.h:625
CorbaPort(const char *name)
コンストラクタ
void activateInterfaces() override
Port の全てのインターフェースを activates する
void deactivateInterfaces() override
全ての Port のインターフェースを deactivates する
void init(coil::Properties &prop)
プロパティの初期化
bool registerConsumer(const char *instance_name, const char *type_name, CorbaConsumerBase &consumer)
Consumer を登録する
ReturnCode_t publishInterfaces(ConnectorProfile &connector_profile) override
Provider Interface 情報を公開する
ReturnCode_t subscribeInterfaces(const ConnectorProfile &connector_profile) override
Provider Interface 情報を取得する
~CorbaPort() override
仮想デストラクタ
void unsubscribeInterfaces(const ConnectorProfile &connector_profile) override
Interface への接続を解除する
bool registerProvider(const char *instance_name, const char *type_name, PortableServer::RefCountServantBase &provider)
Provider を登録する
coil::Properties m_properties
プロパティ
Definition: CorbaPort.h:1073
CORBA::ORB_ptr getORB()
ORB のポインタを取得する (所有権複製)
static Manager & instance()
マネージャのインスタンスの取得
PortableServer::POA_ptr getPOA()
Manager が持つ RootPOA のポインタを取得する (所有権複製)
Port の基底クラス
Definition: PortBase.h:132
RTC::ReturnCode_t activate(const RTC::RTObject_ptr rtc, const RTC::UniqueId ec_id=0)
RTCを指定した実行コンテキストでアクティベーションする
RTC::ReturnCode_t deactivate(const RTC::RTObject_ptr rtc, const RTC::UniqueId ec_id=0)
RTCを指定した実行コンテキストで非アクティベーションする
coil::Properties Properties
Definition: RTC.h:72