bool IdAssignment::default_consumer_admin_test (CosNotifyChannelAdmin::ChannelID channel_id) { CosNotifyChannelAdmin::EventChannel_var ec = this->notify_factory_->get_event_channel (channel_id); if (CORBA::is_nil (ec.in ())) { ACE_ERROR((LM_ERROR, " (%P|%t) Unable to find event channel\n")); return false; } CosNotifyChannelAdmin::ConsumerAdmin_var default_consumer_admin = ec->get_consumeradmin (0); if (CORBA::is_nil (default_consumer_admin.in())) { ACE_ERROR_RETURN ((LM_ERROR, " (%P|%t) Unable to create default consumer admin\n"), false); } CosNotifyChannelAdmin::ConsumerAdmin_var def = ec->default_consumer_admin (); if (CORBA::is_nil (default_consumer_admin.in())) { ACE_ERROR_RETURN ((LM_ERROR, " (%P|%t) Unable to get default consumer admin\n"), false); } if (! default_consumer_admin->_is_equivalent(def.in ())) { ACE_ERROR_RETURN ((LM_ERROR, " (%P|%t) failed for default consumer admin checking\n"), false); } if (TAO_debug_level) ACE_DEBUG ((LM_DEBUG, "passed default consumer admin test.\n")); return true; }
int ACE_TMAIN (int argc, ACE_TCHAR *argv[]) { int status = 0; try { Consumer_Client client; status = client.init (argc, argv); if (status == 0) { CosNotifyChannelAdmin::EventChannel_var ec = client.create_event_channel ("MyEventChannel", 1); CORBA::ORB_ptr orb = client.orb (); CORBA::Object_var object = orb->string_to_object (ior); sig_var sig = sig::_narrow (object.in ()); if (CORBA::is_nil (sig.in ())) { ACE_ERROR_RETURN ((LM_ERROR, "Object reference <%s> is nil\n", ior), 1); } CosNotifyChannelAdmin::ConsumerAdmin_var admin = ec->default_consumer_admin(); CosNotifyFilter::Filter_var filter = create_proxyFilter (ec.in()); if (!CORBA::is_nil (admin.in ())) { create_consumers (admin.in (), &client, filter.in()); // Tell the supplier to go sig->go (); ACE_Time_Value tv(10, 0); client.ORB_run(tv); ACE_DEBUG((LM_DEBUG, "Consumer done.\n")); sig->done (); ACE_DEBUG((LM_DEBUG, "Expected %d message(s) and received %d message(s).\n", expect_fail == 1 ? 0 : 1, consumer_1->messages_received())); if (1 == expect_fail) status = consumer_1->messages_received() == 0 ? 0 : 1; else status = consumer_1->messages_received() == 1 ? 0 : 1; ACE_DEBUG((LM_DEBUG, "Test status is %s.\n", status == 1 ? "fail" : "pass")); } } } catch (const CORBA::Exception& e) { e._tao_print_exception ("Error: Consumer exception: "); status = 1; } return status; }
int main(int argc, char* argv[]){ char aux1[1000]; try{ // // Inicializacion del ORB // CORBA::ORB_var orb = CORBA::ORB_init(argc, argv, ""); CORBA::Object_var obj = orb->resolve_initial_references("RootPOA"); PortableServer::POA_var root_poa = PortableServer::POA::_narrow(obj); PortableServer::POAManager_var manager = root_poa->the_POAManager(); // // Obtain NamincContext reference ... // CORBA::Object_var naming_context_object; CosNaming::NamingContext_ptr naming_context; try { naming_context_object = orb->string_to_object("corbaloc:iiop:[email protected]:2809/NameService"); naming_context = CosNaming::NamingContext::_narrow (naming_context_object.in ()); } catch (...) { cerr << "Error: cannot obtain naming service initial reference" << endl; throw; } // // Crea un POA para el supplier: PERSISTENT LifespanPolicy, USER_ID policy // PortableServer::LifespanPolicy_var lifespan = root_poa->create_lifespan_policy(PortableServer::PERSISTENT); PortableServer::IdAssignmentPolicy_var idAssignment = root_poa->create_id_assignment_policy(PortableServer::USER_ID); CORBA::PolicyList policies(2); policies.length(2); policies[0] = PortableServer::IdAssignmentPolicy::_duplicate(idAssignment); policies[1] = PortableServer::LifespanPolicy::_duplicate(lifespan); PortableServer::POA_var consumer_poa = root_poa->create_POA("consumerPOA", manager.in(), policies); PortableServer::POAManager_var consumer_poa_manager = consumer_poa->the_POAManager(); idAssignment->destroy(); lifespan->destroy(); // Activa el POAManager manager->activate(); // // Crea y activa el servant del consumer // PortableServer::ObjectId_var oid = PortableServer::string_to_ObjectId("MyConsumer"); MyConsumerImpl servant_consumer; try{ consumer_poa->activate_object_with_id(oid.in(), &servant_consumer); } catch(...){ cerr << "[supplier] ERROR: activating servant_supplier " << endl; } CORBA::Object_var consumer_obj = consumer_poa->id_to_reference(oid.in()); CosEventComm::PushConsumer_var consumer = CosEventComm::PushConsumer::_narrow(consumer_obj); // // Recoge la referencia al canal // // readChannelIOR(); // obj = orb->string_to_object(ChannelIOR); CosNaming::NamingContext_var naming_context_notif = NULL; CosNaming::Name name_notif(2); name_notif.length (2); name_notif[0].id = CORBA::string_dup ("MyNotif"); name_notif[0].kind = CORBA::string_dup (""); name_notif[1].id = CORBA::string_dup ("channel"); name_notif[1].kind = CORBA::string_dup (""); obj = naming_context->resolve(name_notif); CosNotifyChannelAdmin::EventChannel_var channel; channel = CosNotifyChannelAdmin::EventChannel::_narrow(obj); if (CORBA::is_nil(channel)) { cerr << "[consumer] ERROR: canal nulo " << endl; return -1; } // cerr << "[consumer] ChannelId " << channel->get_channelID() << endl; // // Obtenemos el manager // CosNotifyChannelAdmin::ConsumerAdmin_var consumerAdmin; CosNotifyChannelAdmin::AdminID adminid; try{ consumerAdmin = channel->default_consumer_admin(); } catch(CORBA::Exception &ce){ fprintf(stderr,"(%s)%i CORBA::Exception - %s\n", __FILE__,__LINE__,ce._name()); } catch(...){ fprintf(stderr,"(%s)%i - Unexpected exception!", __FILE__,__LINE__); } // // Obtenemos el proxy // CosNotifyChannelAdmin::ProxyPushSupplier_var pushSupplier; CosNotifyChannelAdmin::ProxyID proxy_id; CosNotifyChannelAdmin::ClientType ctype = CosNotifyChannelAdmin::ANY_EVENT; try{ CosNotifyChannelAdmin::ProxySupplier_var obj = consumerAdmin->obtain_notification_push_supplier(ctype, proxy_id); pushSupplier = CosNotifyChannelAdmin::ProxyPushSupplier::_narrow(obj); // Conecta proxy pushSupplier->connect_any_push_consumer(consumer); } catch(CosEventChannelAdmin::AlreadyConnected &ac){ fprintf(stderr,"(%s)%i CosEventChannelAdmin::AlreadyConnected\n", __FILE__,__LINE__); } catch(CORBA::SystemException& se){ fprintf(stderr,"(%s)%i CORBA::SystemException\n", __FILE__,__LINE__); } catch(CosNotifyChannelAdmin::AdminLimitExceeded err){ fprintf(stderr,"(%s)%i CosNotifyChannelAdmin::AdminLimitExceeded\n", __FILE__,__LINE__); } catch(CORBA::Exception &ce){ fprintf(stderr,"(%s)%i CORBA::Exception - %s\n", __FILE__,__LINE__,ce._name()); } catch(...){ fprintf(stderr,"Unexpected exception!\n"); } // // // // Guarda la referencia en el Servicio de Nombres // // // CosNaming::NamingContext_var naming_context_notif = NULL; // CosNaming::Name name_notif(1); // name_notif.length (1); // name_notif[0].id = CORBA::string_dup ("MyNotif"); // name_notif[0].kind = CORBA::string_dup (""); // naming_context_notif = naming_context->bind_new_context(name_notif); // CosNaming::Name name_consumer(1); // name_consumer.length (1); // name_consumer[0].id = CORBA::string_dup ("consumer"); // name_consumer[0].kind = CORBA::string_dup (""); // naming_context_notif->bind(name_consumer, consumer_obj); cerr << "[consumer] Esperando eventos.... " << endl; orb->run(); cerr << "[consumer] disconnect .... " << endl; // supplier->disconnect_push_supplier(); // consumeradmin->destroy(); cerr << "[consumer] Terminando " << endl; orb->shutdown(true); orb->destroy(); } catch(CORBA::Exception& exc) { cerr << "[consumer] Excepcion: " << exc << endl; return 1; } }
int main(int argc,char *argv []) { CORBA::ORB_ptr orb_ptr; try { /************************************************************************/ /* INICIALIZAMOS LA PARTE DEL ORB */ /************************************************************************/ int alt_argc = 0; char ** alt_argv; const char * orb_id="Test_TIDNotification"; orb_ptr=CORBA::ORB_init(argc, argv, orb_id); if (!orb_ptr) { cerr<<"El ORB es null"<<endl; return -1; } CORBA::Object_ptr delegado_POA; PortableServer::POA_ptr rootPOA; try { delegado_POA = orb_ptr->resolve_initial_references("RootPOA"); } catch ( CORBA::ORB::InvalidName ex ) { ex._name(); return -1; } rootPOA = PortableServer::_POAHelper::narrow( delegado_POA,true ); PortableServer::POAManager_var poa_manager = rootPOA->the_POAManager(); CORBA::PolicyList_var policies = NULL; policies = new CORBA::PolicyList(2); policies->length(2); // Valores cambiados (*policies)[0] = rootPOA->create_lifespan_policy ( PortableServer::PERSISTENT ); (*policies)[1] = rootPOA->create_id_assignment_policy ( PortableServer::USER_ID ); PortableServer::POA_var consumerPOA = rootPOA->create_POA("consumerPOA", poa_manager, *policies ); /***********************************************************************/ /* OBTENEMOS LA FACTORIA DEL CANAL DE EVENTOS Y CREAMOS EL CANAL */ /**********************************************************************/ CORBA::Object_ptr delegado_event_channel_factory; delegado_event_channel_factory=orb_ptr->string_to_object(argv[1]); CosNotifyChannelAdmin::EventChannelFactory_var factory; factory = CosNotifyChannelAdmin::EventChannelFactory::_narrow(delegado_event_channel_factory); if (CORBA::is_nil(factory)) { cerr << "[server] ERROR: factoria nula " << endl; return -1; } CosNotifyChannelAdmin::EventChannel_var channel; //CosNotifyChannelAdmin::EventChannel_var channelv[10]; CosNotification::QoSProperties initial_qos; CosNotification::AdminProperties initial_admin; CosNotifyChannelAdmin::ChannelID id; //CosNotifyChannelAdmin::ChannelID idv[10]; // // Politicas Soportadas: // initial_qos.length(9); // initial_qos[0].name = CORBA::string_dup("OrderPolicy"); // initial_qos[0].value <<= CosNotification::FifoOrder; // Any Fifo Priority Deadline // initial_qos[1].name = CORBA::string_dup("EventReliability"); // initial_qos[1].value <<= CosNotification::BestEffort; // Persistent // initial_qos[2].name = CORBA::string_dup("ConnectionReliability"); // initial_qos[2].value <<= CosNotification::BestEffort; // Persistent // initial_qos[3].name = CORBA::string_dup("Priority"); // initial_qos[3].value <<= CosNotification::HighestPriority; // Highest, Default // initial_qos[4].name = CORBA::string_dup("StartTime"); // initial_qos[4].value <<= *(new TimeBase::UtcT( // TIDorb::core::util::Time::currentTimeMillis(), // 0,0,0)); // initial_qos[5].name = CORBA::string_dup("StopTime"); // initial_qos[5].value <<= *(new TimeBase::UtcT( // TIDorb::core::util::Time::currentTimeMillis(), // 0,0,0)); // initial_qos[6].name = CORBA::string_dup("Timeout"); // initial_qos[6].value <<= (TimeBase::TimeT)TIDorb::core::util::Time::currentTimeMillis(); // initial_qos[7].name = CORBA::string_dup("StartTimeSupported"); // initial_qos[7].value <<= (CORBA::Boolean) 0; // initial_qos[8].name = CORBA::string_dup("StopTimeSupported"); // initial_qos[8].value <<= (CORBA::Boolean) 1; // // Politicas de QoS no soportadas // // initial_qos[0].name = CORBA::string_dup("DiscardPolicy"); // initial_qos[0].value <<= CosNotification::AnyOrder; // Any Fifo Priority Deadline // initial_qos[7].name = CORBA::string_dup("MaximumBatchSize"); // initial_qos[7].value <<= (CORBA::Long) 20; // initial_qos[0].name = CORBA::string_dup("PacingInterval"); // initial_qos[0].value <<= (TimeBase::TimeT)TIDorb::core::util::Time::currentTimeMillis(); // initial_qos[9].name = CORBA::string_dup("MaxEventsPerConsumer"); // initial_qos[9].value <<= (CORBA::Long) 20; try { // Crear el canal channel = factory->get_event_channel(0); // for(int i=0; i < 10; i++){ // channelv[i] = factory->create_channel(initial_qos, initial_admin, idv[i]); // } } catch (CosNotifyChannelAdmin::ChannelNotFound &ex) { cerr << "[server_consumer] CosNotifyChannelAdmin::ChannelNotFound: " << ex._name(); return -1; } /**************************************************************************/ /* OBTENEMOS EL CONSUMERADMIN POR DEFECTO */ /**************************************************************************/ CosNotifyChannelAdmin::ConsumerAdmin_ptr consumerAdmin; consumerAdmin = channel->default_consumer_admin(); //Metemos los filtros en el consumer admin CosNotifyFilter::Filter* filter_II = create_filter(channel,"GSyC","test","$domain_name != 'GSyC'"); //consumerAdmin->add_filter(filter_II); //CosNotifyFilter::Filter* filter_III = create_filter(channel,"GSyC","test","$.remainder_of_boy.campo_uno != 1"); //consumerAdmin->add_filter(filter_III); /**************************************************************************/ /* OBTENEMOS EL PROXYSUPPLIER APARTIR DEL CONSUMERADMIN */ /**************************************************************************/ //TODO_MORFEO: add new filters CosNotifyChannelAdmin::ProxySupplier_ptr proxySupplier; CosNotifyChannelAdmin::ProxyID proxySupplierID = 1; proxySupplier = consumerAdmin->obtain_notification_push_supplier(CosNotifyChannelAdmin::ANY_EVENT, proxySupplierID); /**************************************************************************/ /* OBTENEMOS EL PROXYPUSHSUPPLIER APARTIR DEL CONSUMERADMIN */ /**************************************************************************/ CosNotifyChannelAdmin::StructuredProxyPushSupplier_ptr proxyPushSupplier; proxyPushSupplier = CosNotifyChannelAdmin::StructuredProxyPushSupplier::_narrow(proxySupplier); /**************************************************************************/ /* INSTANCIAMOS LOS PROXYS Y LOS ACTIVAMOS EN EL POA */ /**************************************************************************/ my_push_consumer * my_consumer = new my_push_consumer(orb_ptr,proxyPushSupplier); PortableServer::ObjectId_ptr consumer_objectID = PortableServer::string_to_ObjectId("My_Consumer:1.0"); consumerPOA->activate_object_with_id(*consumer_objectID,my_consumer); poa_manager->activate(); CORBA::Object_ptr obj_consumer = consumerPOA->id_to_reference(*consumer_objectID); CosNotifyComm::StructuredPushConsumer_ptr my_pushConsumer = CosNotifyComm::StructuredPushConsumer::_narrow(obj_consumer); /***********************************************************************/ /* CONECTAMOS EL PUSHSUPPLIER Y EL PUSHCONSUMER */ /***********************************************************************/ proxyPushSupplier->connect_structured_push_consumer(my_pushConsumer); orb_ptr->run(); } catch (CORBA::Exception & e) { cerr<<"[Test_Filter] unknown error"<< typeid(e).name() << e._name(); return -1; } }