echoeventconsumermain.cpp

来自「corbar RTEC_Federated」· C++ 代码 · 共 109 行

CPP
109
字号
// EchoEventConsumerMain.cpp// Main program for a PushConsumer of Echo events.#include "EchoEventConsumer_i.h"#include <orbsvcs/RtecEventCommC.h>#include <orbsvcs/RtecEventChannelAdminC.h> #include <orbsvcs/Time_Utilities.h>#include <orbsvcs/Event_Utilities.h>#include <orbsvcs/CosNamingC.h>#include <ace/streams.h> const RtecEventComm::EventSourceID MY_SOURCE_ID  = ACE_ES_EVENT_SOURCE_ANY + 1;const RtecEventComm::EventType     MY_EVENT_TYPE = ACE_ES_EVENT_UNDEFINED + 1;const int EVENT_LIMIT = 10;int main (int argc, char* argv[]){  try  {    // Initialize the ORB.    CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);    const char* ecname = "EventService";    for (int i = 0; argv[i] != 0; i++) {      if (strcmp(argv[i], "-ecname") == 0) {        if (argv[i+1] != 0) {          ecname = argv[i+1];        } else {          cerr << "Missing Event channel name" << endl;        }      }    }    // Find the Naming Service.    CORBA::Object_var obj = orb->resolve_initial_references("NameService");    CosNaming::NamingContextExt_var naming_client       = CosNaming::NamingContextExt::_narrow(obj.in());    // Find the EchoEventChannel.    obj = naming_client->resolve_str(ecname);    // Downcast the object reference to an EventChannel reference.    RtecEventChannelAdmin::EventChannel_var ec =       RtecEventChannelAdmin::EventChannel::_narrow(obj.in());    if (CORBA::is_nil(ec.in())) {      cerr << "Could not narrow EchoEventChannel." << endl;      return 1;    }    cout << "EchoEventConsumerMain.cpp: Found the EchoEventChannel." << endl;    // Obtain a reference to the consumer administration object.    RtecEventChannelAdmin::ConsumerAdmin_var admin = ec->for_consumers();    // Obtain a reference to the push supplier proxy.    RtecEventChannelAdmin::ProxyPushSupplier_var supplier =      admin->obtain_push_supplier();    // Get the RootPOA.    obj = orb->resolve_initial_references("RootPOA");    PortableServer::POA_var poa = PortableServer::POA::_narrow(obj.in());    // Instantiate an EchoEventConsumer_i servant and register it    // with the RootPOA    EchoEventConsumer_i servant(orb.in(), EVENT_LIMIT);    PortableServer::ObjectId_var oid = poa->activate_object(&servant);    CORBA::Object_var consumer_obj = poa->id_to_reference(oid.in());    RtecEventComm::PushConsumer_var consumer =      RtecEventComm::PushConsumer::_narrow(consumer_obj.in());        // Connect as a consumer.    ACE_ConsumerQOS_Factory qos;    qos.start_disjunction_group ();    qos.insert (MY_SOURCE_ID,   // Source ID                MY_EVENT_TYPE,  // Event Type                0);             // handle to the rt_info    supplier->connect_push_consumer (consumer.in (),                                     qos.get_ConsumerQOS ());    // Activate the POA via its POAManager.    PortableServer::POAManager_var poa_manager = poa->the_POAManager();    poa_manager->activate();    cout << "EchoEventConsumerMain.cpp: Ready to receive events..." << endl;    // Enter the ORB event loop.    orb->run();    // If we have reached this, we must be shutting down...    // Disconnect the ProxyPushSupplier.    supplier->disconnect_push_supplier();    supplier = RtecEventChannelAdmin::ProxyPushSupplier::_nil();    admin = RtecEventChannelAdmin::ConsumerAdmin::_nil();    orb->destroy();    cout << "Test completed." << endl;    return 0;  }  catch (CORBA::Exception& exc)   {    cerr << "Caught CORBA::Exception" << endl << exc << endl;  }  return 1;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?