void TAO_Notify_StructuredProxyPushConsumer::load_attrs (const TAO_Notify::NVPList& attrs) { SuperClass::load_attrs(attrs); ACE_CString ior; if (attrs.load("PeerIOR", ior)) { CORBA::ORB_var orb = TAO_Notify_PROPERTIES::instance()->orb(); try { CosNotifyComm::StructuredPushSupplier_var ps = CosNotifyComm::StructuredPushSupplier::_nil(); if ( ior.length() > 0 ) { CORBA::Object_var obj = orb->string_to_object(ior.c_str()); ps = CosNotifyComm::StructuredPushSupplier::_unchecked_narrow(obj.in()); } // minor hack: suppress generating subscription updates during reload. bool save_updates = this->updates_off_; this->updates_off_ = true; this->connect_structured_push_supplier(ps.in()); this->updates_off_ = save_updates; } catch (const CORBA::Exception&) { // if we can't reconnect to peer, tough... } } }
void TAO_Notify_ThreadPool_Supplier::connect (void) { // Activate the supplier object. CosNotifyComm::StructuredPushSupplier_var objref = this->_this (); CosNotifyChannelAdmin::ProxyConsumer_var proxyconsumer; if (this->proxy_consumer_thread_count_ != 0) { // Narrow to the extended interface. NotifyExt::SupplierAdmin_var admin_ext = NotifyExt::SupplierAdmin::_narrow (this->admin_.in ()); NotifyExt::ThreadPoolParams tp_params = { NotifyExt::CLIENT_PROPAGATED, 0, 0, static_cast<CORBA::ULong> (this->proxy_consumer_thread_count_), 0, 0, 0, 0, 0 }; CosNotification::QoSProperties qos (1); qos.length (1); qos[0].name = CORBA::string_dup (NotifyExt::ThreadPool); qos[0].value <<= tp_params; // Obtain the proxy. The QoS is applied to the POA in which the Proxy is hosted. proxyconsumer = admin_ext->obtain_notification_push_consumer_with_qos (CosNotifyChannelAdmin::STRUCTURED_EVENT , proxy_consumer_id_, qos); } else { // Obtain the proxy. proxyconsumer = this->admin_->obtain_notification_push_consumer (CosNotifyChannelAdmin::STRUCTURED_EVENT , proxy_consumer_id_); } ACE_ASSERT (!CORBA::is_nil (proxyconsumer.in ())); // narrow this->proxy_consumer_ = CosNotifyChannelAdmin::StructuredProxyPushConsumer::_narrow (proxyconsumer.in ()); ACE_ASSERT (!CORBA::is_nil (proxy_consumer_.in ())); // connect to the proxyconsumer. proxy_consumer_->connect_structured_push_supplier (objref.in ()); ACE_DEBUG ((LM_DEBUG, "(%P,%t) Created Supplier %d with %d threads at the ProxyConsumer\n", proxy_consumer_id_, this->proxy_consumer_thread_count_)); }
void Notify_Push_Supplier::_connect ( CosNotifyChannelAdmin::SupplierAdmin_ptr supplier_admin, CosNotifyChannelAdmin::EventChannel_ptr notify_channel, bool useFilter) { CosNotifyComm::StructuredPushSupplier_var objref = this->_this (); CosNotifyChannelAdmin::ProxyConsumer_var proxyconsumer = supplier_admin->obtain_notification_push_consumer ( CosNotifyChannelAdmin::STRUCTURED_EVENT, proxy_id_); if (useFilter) { CosNotifyFilter::FilterFactory_var ffact = notify_channel->default_filter_factory (); CosNotifyFilter::Filter_var filter = ffact->create_filter ("TCL"); ACE_ASSERT(! CORBA::is_nil (filter.in ())); CosNotifyFilter::ConstraintExpSeq constraint_list (1); constraint_list.length (1); constraint_list[0].event_types.length (0); constraint_list[0].constraint_expr = CORBA::string_dup ("group != 0"); filter->add_constraints (constraint_list); proxyconsumer->add_filter (filter.in ()); } this->proxy_ = CosNotifyChannelAdmin::StructuredProxyPushConsumer::_narrow ( proxyconsumer.in ()); this->proxy_->connect_structured_push_supplier (objref.in ()); // give ownership to POA this->_remove_ref (); }
void TAO_Notify_Lanes_Supplier_Client::write_ior (void) { CosNotifyComm::StructuredPushSupplier_var objref = this->supplier_->_this (); // Write the ior to a file to signal waiting consumers. FILE *ior_output_file = ACE_OS::fopen (this->ior_file_name_.c_str (), ACE_TEXT("w")); if (ior_output_file != 0) { CORBA::String_var str = this->orb_objects_.orb_->object_to_string (objref.in ()); ACE_OS::fprintf (ior_output_file, "%s", str.in ()); ACE_OS::fclose (ior_output_file); } }
void Filter_StructuredPushSupplier::connect (CosNotifyChannelAdmin::SupplierAdmin_ptr supplier_admin) { CosNotifyComm::StructuredPushSupplier_var objref = this->_this (); CosNotifyChannelAdmin::ProxyConsumer_var proxyconsumer = supplier_admin->obtain_notification_push_consumer (CosNotifyChannelAdmin::STRUCTURED_EVENT, proxy_consumer_id_); ACE_ASSERT (!CORBA::is_nil (proxyconsumer.in ())); // narrow this->proxy_consumer_ = CosNotifyChannelAdmin::StructuredProxyPushConsumer::_narrow (proxyconsumer.in ()); ACE_ASSERT (!CORBA::is_nil (proxy_consumer_.in ())); proxy_consumer_->connect_structured_push_supplier (objref.in ()); }
void TAO_Notify_Lanes_Supplier::connect (void) { // Activate the supplier object. CosNotifyComm::StructuredPushSupplier_var objref = this->_this (); // Obtain the proxy. CosNotifyChannelAdmin::ProxyConsumer_var proxyconsumer = this->admin_->obtain_notification_push_consumer (CosNotifyChannelAdmin::STRUCTURED_EVENT , proxy_consumer_id_); ACE_ASSERT (!CORBA::is_nil (proxyconsumer.in ())); // narrow this->proxy_consumer_ = CosNotifyChannelAdmin::StructuredProxyPushConsumer::_narrow (proxyconsumer.in ()); ACE_ASSERT (!CORBA::is_nil (proxy_consumer_.in ())); // connect to the proxyconsumer. proxy_consumer_->connect_structured_push_supplier (objref.in ()); }
int ACE_TMAIN (int argc, ACE_TCHAR *argv[]) { try { PortableServer::POAManager_var poa_manager; CORBA::ORB_var orb = CORBA::ORB_init(argc, argv); CORBA::Object_var poa_obj = orb->resolve_initial_references("RootPOA"); PortableServer::POA_var root_poa = PortableServer::POA::_narrow(poa_obj.in()); poa_manager = root_poa->the_POAManager(); poa_manager->activate(); /*Get event_channel*/ std::cout << "Create event_channel now" << std::endl; CosNotifyChannelAdmin::EventChannel_var ec = get_event_channel(orb.in()); //Instanciating the Supplier CosNotifyComm::StructuredPushSupplier_var sps = CosNotifyComm::StructuredPushSupplier::_nil(); CosNotifyCommImpl::StructuredPushSupplier *pImpl_sps = new CosNotifyCommImpl::StructuredPushSupplier; sps = pImpl_sps->_this(); //Obtain a Supplier Admin CosNotifyChannelAdmin::SupplierAdmin_var sa = ec->default_supplier_admin(); if( sa.in() == CosNotifyChannelAdmin::SupplierAdmin::_nil() ){ std::cerr << "sa is nil!" << std::endl; return 1; } //Obtain a Proxy Consumer CosNotifyChannelAdmin::ProxyID proxy_id; CosNotifyChannelAdmin::ClientType ctype = CosNotifyChannelAdmin::STRUCTURED_EVENT; CosNotifyChannelAdmin::ProxyConsumer_var proxyCon_obj; try { proxyCon_obj = sa->obtain_notification_push_consumer(ctype, proxy_id); } catch(CosNotifyChannelAdmin::AdminLimitExceeded err) { std::cerr << "CosNotifyChannelAdmin::AdminLimitExceeded Exception!" << std::endl; throw; } CosNotifyChannelAdmin::StructuredProxyPushConsumer_var ppc = CosNotifyChannelAdmin::StructuredProxyPushConsumer::_narrow(proxyCon_obj.in()); //Connecting a Supplier to a Proxy Consumer try { ppc->connect_structured_push_supplier(sps.in()); } catch (CosEventChannelAdmin::AlreadyConnected ac) { std::cerr << "CosEventChannelAdmin::AlreadyConnected" << std::endl; throw; } catch (CORBA::SystemException& se) { std::cerr << "System exception occurred during connect: " << se << std::endl; throw; } //Demo::demo_send_heart_beat(ppc); //Send a Demo Notification CosNotification::StructuredEvent event; event.header.fixed_header.event_type.domain_name = CORBA::string_dup("Test_domain"); event.header.fixed_header.event_type.type_name = CORBA::string_dup("Test_type_name"); event.header.variable_header.length(0); event.remainder_of_body <<= ""; std::cout << "Sending a demo event...," << std::endl; std::cout << "event.header.fixed_header.event_type.domain_name = " << event.header.fixed_header.event_type.domain_name << std::endl; std::cout << "event.header.fixed_header.event_type.type_name = " << event.header.fixed_header.event_type.type_name << std::endl; try{ ppc->push_structured_event(event); } catch (CORBA::SystemException& se) { std::cerr << "System exception occurred during push: " << se << std::endl; throw; } catch (CORBA::Exception&) { std::cerr << "Unknown exception occurred during push" << std::endl; throw; } try{ ppc->disconnect_structured_push_consumer(); } catch(CORBA::Exception&) { std::cerr << "Disconnect fail!" << std::endl; } orb->shutdown(); ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Supplier done.\n"))); } catch(...) { std::cerr << "Supplier: Some exceptions was caught!" << std::endl; return 1; } return 0; }
int ACE_TMAIN(int argc, ACE_TCHAR * argv[]) { try { CORBA::ORB_var orb = CORBA::ORB_init(argc, argv); CORBA::Object_var rootObj = orb->resolve_initial_references("NameService"); CosNaming::NamingContext_var rootNC = CosNaming::NamingContext::_narrow(rootObj.in()); // Get reference to Root POA. CORBA::Object_var obj = orb->resolve_initial_references("RootPOA"); PortableServer::POA_var poa = PortableServer::POA::_narrow(obj.in()); // Activate POA manager PortableServer::POAManager_var mgr = poa->the_POAManager(); mgr->activate(); // Create an Event Channel factory. CosNotifyChannelAdmin::EventChannelFactory_var notify_factory = TAO_Notify_EventChannelFactory_i::create(poa.in()); ACE_ASSERT (!CORBA::is_nil (notify_factory.in ())); // Create an Event Channel. CosNotifyChannelAdmin::ChannelID id; CosNotification::QoSProperties initial_qos; CosNotification::AdminProperties initial_admin; CosNotifyChannelAdmin::EventChannel_var ec = notify_factory->create_channel (initial_qos, initial_admin, id); // Bind it in the Naming Service. CosNaming::Name name(1); name.length(1); name[0].id = CORBA::string_dup("MyEventChannel"); rootNC->rebind(name, ec.in()); // Become a structured push supplier. CosNotifyChannelAdmin::AdminID adminid; CosNotifyChannelAdmin::InterFilterGroupOperator ifgop = CosNotifyChannelAdmin::AND_OP; CosNotifyChannelAdmin::SupplierAdmin_var supplier_admin = ec->new_for_suppliers (ifgop, adminid); CosNotifyChannelAdmin::ProxyID supplieradmin_proxy_id; CosNotifyChannelAdmin::ProxyConsumer_var proxy_consumer = supplier_admin->obtain_notification_push_consumer( CosNotifyChannelAdmin::STRUCTURED_EVENT, supplieradmin_proxy_id); StructuredEventSupplier_i *servant = new StructuredEventSupplier_i(orb.in()); CosNotifyComm::StructuredPushSupplier_var supplier = servant->_this(); CosNotifyChannelAdmin::StructuredProxyPushConsumer_var consumer_proxy = CosNotifyChannelAdmin::StructuredProxyPushConsumer::_narrow( proxy_consumer.in()); consumer_proxy->connect_structured_push_supplier(supplier.in()); // Set up events to push. CosNotification::StructuredEvent event; event.header.fixed_header.event_type.domain_name = CORBA::string_dup("OCI_TAO"); event.header.fixed_header.event_type.type_name = CORBA::string_dup("examples"); event.header.fixed_header.event_name = CORBA::string_dup("myevent"); event.filterable_data.length (1); event.filterable_data[0].name = CORBA::string_dup("Message from:"); event.filterable_data[0].value <<= (const char *)user_name; event.filterable_data.length (2); event.filterable_data[1].name = CORBA::string_dup("Subject:"); event.filterable_data[1].value <<= (const char *)subject; event.filterable_data.length (3); event.filterable_data[2].name = CORBA::string_dup("Message:"); event.filterable_data[2].value <<= (const char *)message; // Push events. while (1) { std::cout << "pushing " << std::endl; consumer_proxy->push_structured_event (event); ACE_OS::sleep (1); } } catch(const CORBA::Exception& ex) { return 1; } return 0; }
int TAO::FT_FaultNotifier_i::init (CORBA::ORB_ptr orb ) { int result = 0; this->orb_ = CORBA::ORB::_duplicate (orb); // Use the ROOT POA for now CORBA::Object_var poa_object = this->orb_->resolve_initial_references (TAO_OBJID_ROOTPOA); if (CORBA::is_nil (poa_object.in ())) ORBSVCS_ERROR_RETURN ((LM_ERROR, ACE_TEXT (" (%P|%t) Unable to initialize the POA.\n")), -1); // Get the POA object. this->poa_ = PortableServer::POA::_narrow (poa_object.in ()); if (CORBA::is_nil(this->poa_.in ())) { ORBSVCS_ERROR_RETURN ((LM_ERROR, ACE_TEXT (" (%P|%t) Unable to narrow the POA.\n")), -1); } PortableServer::POAManager_var poa_manager = this->poa_->the_POAManager (); poa_manager->activate (); // Register with the POA. this->object_id_ = this->poa_->activate_object (this); // find my IOR CORBA::Object_var this_obj = this->poa_->id_to_reference (object_id_.in ()); this->ior_ = this->orb_->object_to_string (this_obj.in ()); //////////////////////////////////////////////// // Register with coresident Notification Channel CosNotifyChannelAdmin::EventChannelFactory_var notify_factory = TAO_Notify_EventChannelFactory_i::create (poa_.in ()); CosNotification::QoSProperties initial_qos; CosNotification::AdminProperties initial_admin; this->notify_channel_ = notify_factory->create_channel (initial_qos, initial_admin, channel_id_); this->filter_factory_ = this->notify_channel_->default_filter_factory (); /////////////////////////// // Producer registration this->supplier_admin_ = this->notify_channel_->default_supplier_admin (); ::CosNotifyChannelAdmin::ProxyID proxyId = 0; ////////////////////// // structured producer ::CosNotifyChannelAdmin::ProxyConsumer_var consumer = this->supplier_admin_->obtain_notification_push_consumer ( ::CosNotifyChannelAdmin::STRUCTURED_EVENT, proxyId); structured_proxy_push_consumer_ = ::CosNotifyChannelAdmin::StructuredProxyPushConsumer::_narrow(consumer.in ()); if (CORBA::is_nil (this->structured_proxy_push_consumer_.in ())) { ORBSVCS_ERROR_RETURN ((LM_ERROR, "%T %n (%P|%t) Should not occur: Unable to narrow Structured Proxy Push Consumer\n"), 1); } // todo: implement a push supplier if we want to receive disconnect notice CosNotifyComm::StructuredPushSupplier_var stubPushSupplier = CosNotifyComm::StructuredPushSupplier::_nil(); this->structured_proxy_push_consumer_->connect_structured_push_supplier (stubPushSupplier.in()); //////////////////// // Sequence producer consumer = this->supplier_admin_->obtain_notification_push_consumer ( ::CosNotifyChannelAdmin::SEQUENCE_EVENT, proxyId); this->sequence_proxy_push_consumer_ = ::CosNotifyChannelAdmin::SequenceProxyPushConsumer::_narrow(consumer.in ()); if (CORBA::is_nil (this->sequence_proxy_push_consumer_.in ())) { ORBSVCS_ERROR_RETURN ((LM_ERROR, "%T %n (%P|%t) Should not occur: Unable to narrow Sequence Proxy Push Consumer\n"), 1); } // todo: implement this if we want to receive disconnect notice CosNotifyComm::SequencePushSupplier_var stubSeqPushSupplier = CosNotifyComm::SequencePushSupplier::_nil(); this->sequence_proxy_push_consumer_->connect_sequence_push_supplier (stubSeqPushSupplier.in()); /////////////////////////// // Consumer registration // find the channel administrator for consumers this->consumer_admin_ = this->notify_channel_->default_consumer_admin (); if (CORBA::is_nil (this->consumer_admin_.in ())) { ORBSVCS_ERROR ((LM_ERROR, "%T %n (%P|%t) NIL consumer admin\n" )); result = -1; } // everything else happens when subscriber shows up /////////////////////////////// // Register with ReplicationManager if (this->rm_register_) { try { CORBA::Object_var rm_obj = orb->resolve_initial_references("ReplicationManager"); this->replication_manager_ = ::FT::ReplicationManager::_narrow(rm_obj.in()); if (!CORBA::is_nil (replication_manager_.in ())) { // @@: should we check to see if there's already one registered? FT::FaultNotifier_var notifier = FT::FaultNotifier::_narrow (this_obj.in ()); if (! CORBA::is_nil (notifier.in ())) { this->replication_manager_->register_fault_notifier(notifier.in ()); ORBSVCS_DEBUG ((LM_DEBUG, "FaultNotifier registered with ReplicationManager.\n" )); this->registered_ = 1; } else { ORBSVCS_ERROR ((LM_ERROR, "Error: Registration failed. This is not a FaultNotifier (should not occur.)\n" )); } } else { ORBSVCS_ERROR ((LM_ERROR,"FaultNotifier: Can't resolve ReplicationManager, It will not be registered.\n" )); } } catch (const CORBA::Exception& ex) { ex._tao_print_exception ( "FaultNotifier: Exception resolving ReplicationManager. Notifier will not be registered.\n"); } } else { ORBSVCS_DEBUG ((LM_DEBUG, "FaultNotifier: ReplicationManager registration disabled.\n" )); } /////////////////////////////// // Set up and ready for action // publish our IOR if(result == 0) { if (this->ior_output_file_ != 0) { this->identity_ = "file:"; this->identity_ += ACE_TEXT_ALWAYS_CHAR(this->ior_output_file_); result = write_ior(); } } if (result == 0) { if (this->ns_name_ != 0) { this->identity_ = "name:"; this->identity_ += this->ns_name_; CORBA::Object_var naming_obj = this->orb_->resolve_initial_references ("NameService"); if (CORBA::is_nil(naming_obj.in ())) { ORBSVCS_ERROR_RETURN ((LM_ERROR, "%T %n (%P|%t) Unable to find the Naming Service\n"), 1); } this->naming_context_ = CosNaming::NamingContext::_narrow (naming_obj.in ()); if (CORBA::is_nil(this->naming_context_.in ())) { ORBSVCS_ERROR_RETURN ((LM_ERROR, "%T %n (%P|%t) Should not occur: Can't narrow initial reference to naming context.\n"), 1); } this->this_name_.length (1); this->this_name_[0].id = CORBA::string_dup (this->ns_name_); this->naming_context_->rebind (this->this_name_, this_obj.in() //CORBA::Object::_duplicate(this_obj) ); } } return result; }
Messenger_i::Messenger_i (CORBA::ORB_ptr orb) : orb_ (CORBA::ORB::_duplicate (orb)) { CORBA::Object_var naming_obj = orb_->resolve_initial_references ("NameService"); CosNaming::NamingContext_var naming_context = CosNaming::NamingContext::_narrow (naming_obj.in()); CosNaming::Name name; name.length (1); name[0].id = CORBA::string_dup ("NotifyEventChannelFactory"); CORBA::Object_var obj = naming_context->resolve (name); CosNotifyChannelAdmin::EventChannelFactory_var notify_factory = CosNotifyChannelAdmin::EventChannelFactory::_narrow (obj.in ()); CosNotifyChannelAdmin::ChannelID id; CosNotification::QoSProperties initial_qos; CosNotification::AdminProperties initial_admin; CosNotifyChannelAdmin::EventChannel_var ec = notify_factory->create_channel (initial_qos, initial_admin, id); name[0].id = CORBA::string_dup ("MyEventChannel"); naming_context->rebind (name, ec.in()); CosNotifyChannelAdmin::AdminID adminid; CosNotifyChannelAdmin::InterFilterGroupOperator ifgop = CosNotifyChannelAdmin::OR_OP; CosNotifyChannelAdmin::SupplierAdmin_var supplier_admin = ec->new_for_suppliers (ifgop, adminid); CosNotifyChannelAdmin::ProxyID supplieradmin_proxy_id; CosNotifyChannelAdmin::ProxyConsumer_var proxy_consumer = supplier_admin->obtain_notification_push_consumer( CosNotifyChannelAdmin::STRUCTURED_EVENT, supplieradmin_proxy_id); StructuredEventSupplier_i *servant = new StructuredEventSupplier_i(orb_.in()); CORBA::Object_var poa_obj = orb_->resolve_initial_references ("RootPOA"); PortableServer::POA_var poa = PortableServer::POA::_narrow (poa_obj.in ()); PortableServer::POAManager_var mgr = poa->the_POAManager (); mgr->activate (); PortableServer::ObjectId_var objectId = poa->activate_object (servant); CORBA::Object_var supplier_obj = poa->id_to_reference (objectId.in ()); CosNotifyComm::StructuredPushSupplier_var supplier = CosNotifyComm::StructuredPushSupplier::_narrow (supplier_obj.in ()); consumer_proxy_ = CosNotifyChannelAdmin::StructuredProxyPushConsumer::_narrow (proxy_consumer.in()); consumer_proxy_-> connect_structured_push_supplier (supplier.in()); }
Messenger_i::Messenger_i (CORBA::ORB_ptr orb) : orb_(CORBA::ORB::_duplicate(orb)) { CORBA::Object_var poa_object = orb_->resolve_initial_references("RootPOA"); if (CORBA::is_nil (poa_object.in())) { std::cerr << "Unable to initialize the POA." << std::endl; } CORBA::Object_var naming_obj = orb_->resolve_initial_references ("NameService"); if (CORBA::is_nil(naming_obj.in())) { std::cerr << "Unable to find naming service" << std::endl; } CosNaming::NamingContext_var naming_context = CosNaming::NamingContext::_narrow(naming_obj.in()); CosNaming::Name name; name.length (1); name[0].id = CORBA::string_dup("NotifyEventChannelFactory"); CORBA::Object_var obj = naming_context->resolve(name); CosNotifyChannelAdmin::EventChannelFactory_var notify_factory = CosNotifyChannelAdmin::EventChannelFactory::_narrow(obj.in()); if (CORBA::is_nil(notify_factory.in())) { std::cerr << "Unable to find notify factory" << std::endl; } CosNotifyChannelAdmin::ChannelID id; CosNotification::QoSProperties initial_qos; CosNotification::AdminProperties initial_admin; CosNotifyChannelAdmin::EventChannel_var ec = notify_factory->create_channel (initial_qos, initial_admin, id); if (CORBA::is_nil (ec.in())) { std::cerr << "Unable to crete event channel" << std::endl; } // name.length(1); name[0].id = CORBA::string_dup("MyEventChannel"); naming_context->rebind(name, ec.in()); CosNotifyChannelAdmin::AdminID adminid; CosNotifyChannelAdmin::InterFilterGroupOperator ifgop = CosNotifyChannelAdmin::AND_OP; CosNotifyChannelAdmin::SupplierAdmin_var supplier_admin = ec->new_for_suppliers (ifgop, adminid); if (CORBA::is_nil (supplier_admin.in())) { std::cerr << "Unable to find supplier admin" << std::endl; } CosNotifyChannelAdmin::ProxyID supplieradmin_proxy_id; CosNotifyChannelAdmin::ProxyConsumer_var proxy_consumer = supplier_admin->obtain_notification_push_consumer( CosNotifyChannelAdmin::STRUCTURED_EVENT, supplieradmin_proxy_id); StructuredEventSupplier_i *servant = new StructuredEventSupplier_i(orb_.in()); CosNotifyComm::StructuredPushSupplier_var supplier = servant->_this(); s_proxy_consumer_ = CosNotifyChannelAdmin::StructuredProxyPushConsumer:: _narrow(proxy_consumer.in()); if (CORBA::is_nil (s_proxy_consumer_.in())) { std::cerr << "Unable to find structured proxy push consumer" << std::endl; } s_proxy_consumer_-> connect_structured_push_supplier(supplier.in()); CosNotification::EventTypeSeq added (1); CosNotification::EventTypeSeq removed (1); added.length (1); removed.length (1); added[0].domain_name = CORBA::string_dup ("OCI_TAO"); added[0].type_name = CORBA::string_dup ("examples"); removed[0].domain_name = CORBA::string_dup ("*"); removed[0].type_name = CORBA::string_dup ("*"); s_proxy_consumer_->offer_change(added, removed); }
Messenger_i::Messenger_i (CORBA::ORB_ptr orb) : orb_ (CORBA::ORB::_duplicate(orb)) { try { CORBA::Object_var poa_obj = orb->resolve_initial_references("RootPOA"); PortableServer::POA_var poa = PortableServer::POA::_narrow(poa_obj.in()); CORBA::Object_var naming_obj = orb_->resolve_initial_references ("NameService"); if (CORBA::is_nil(naming_obj.in())) { std::cerr << "Unable to find naming service" << std::endl; } CosNaming::NamingContext_var naming_context = CosNaming::NamingContext::_narrow(naming_obj.in()); // // Create an instance of TAO's notification event channel // CosNotifyChannelAdmin::EventChannelFactory_var notify_factory = TAO_Notify_EventChannelFactory_i::create(poa.in()); if (CORBA::is_nil (notify_factory.in ())) { std::cerr << "Unable to create the notify event channel" << std::endl; return; } CosNotifyChannelAdmin::ChannelID id; CosNotification::QoSProperties initial_qos; CosNotification::AdminProperties initial_admin; CosNotifyChannelAdmin::EventChannel_var ec = notify_factory->create_channel (initial_qos, initial_admin, id); if (CORBA::is_nil (ec.in())) { std::cerr << "Unable to create event channel" << std::endl; return; } CosNaming::Name name(1); name.length(1); name[0].id = CORBA::string_dup("MyEventChannel"); naming_context->rebind(name, ec.in()); CosNotifyChannelAdmin::AdminID adminid; CosNotifyChannelAdmin::InterFilterGroupOperator ifgop = CosNotifyChannelAdmin::AND_OP; CosNotifyChannelAdmin::SupplierAdmin_var supplier_admin = ec->new_for_suppliers (ifgop, adminid); if (CORBA::is_nil (supplier_admin.in())) { std::cerr << "Unable to find supplier admin" << std::endl; } CosNotifyChannelAdmin::ProxyID supplieradmin_proxy_id; CosNotifyChannelAdmin::ProxyConsumer_var proxy_consumer = supplier_admin->obtain_notification_push_consumer( CosNotifyChannelAdmin::STRUCTURED_EVENT, supplieradmin_proxy_id); StructuredEventSupplier_i *servant = new StructuredEventSupplier_i(orb_.in()); PortableServer::ObjectId_var oid = poa->activate_object(servant); CORBA::Object_var supplier_obj = poa->id_to_reference(oid.in()); CosNotifyComm::StructuredPushSupplier_var supplier = CosNotifyComm::StructuredPushSupplier::_narrow(supplier_obj.in()); consumer_proxy_ = CosNotifyChannelAdmin::StructuredProxyPushConsumer:: _narrow(proxy_consumer.in()); if (CORBA::is_nil (consumer_proxy_.in())) { std::cerr << "Unable to find structured proxy push consumer" << std::endl; } consumer_proxy_->connect_structured_push_supplier(supplier.in()); } catch(const CORBA::Exception& ex) { std::cerr << ex << std::endl; } }