695 void init(coil::Properties& prop);
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))
1351 void 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;