#include #include #include #include #include #include #include #include "cpx.h" const RtecEventComm::EventSourceID MY_SOURCE_ID = ACE_ES_EVENT_SOURCE_ANY + 1; const RtecEventComm::EventType MY_EVENT_TYPE = ACE_ES_EVENT_UNDEFINED + 1; CPX cpx; RtecEventChannelAdmin::ProxyPushConsumer_var consumer; #include "CPXEventSupplier_i.h" void sigproc(int signo){ signal(SIGRTMIN+29, sigproc); int eventData = cpx.get(1); // Eventset initialisieren RtecEventComm::EventSet events(1); events.length(1); events[0].header.source = MY_SOURCE_ID; events[0].header.type = MY_EVENT_TYPE; events[0].data.any_value <<= eventData; consumer->push(events); /* if(eventData>0) events[0].data.any_value <<= 1; else events[0].data.any_value <<= 255; consumer->push(events); if(rand() < 1626276121){ events[0].header.source = MY_SOURCE_ID; events[0].header.type = MY_EVENT_TYPE+1; if(eventData>0) events[0].data.any_value <<= 2; else events[0].data.any_value <<= 255; consumer->push(events); } */ } int main(int argc, char* argv[]){ struct sched_param schedparam; schedparam.sched_priority = 99; if (sched_setscheduler(0, SCHED_FIFO, &schedparam) != 0) { fprintf(stderr, "%s: PID %d: sched_setscheduler() failed errno = %d\n", __FUNCTION__, getpid(), errno); } signal(SIGRTMIN+29, sigproc); try{ // initialize ORB CORBA::ORB_var orb = CORBA::ORB_init(argc, argv, "ClientORB"); std::cout<<"ORB ok"<resolve_initial_references("NameService"); CosNaming::NamingContextExt_var namingContext = CosNaming::NamingContextExt::_narrow(namingObject.in()); std::cout<<"NamingService ok"<resolve_str("EventService"); RtecEventChannelAdmin::EventChannel_var ec = RtecEventChannelAdmin::EventChannel::_narrow(esObj.in()); if(CORBA::is_nil(ec.in())){ std::cout<<"couldn't connect to EventService\n"; return 1; } RtecEventChannelAdmin::SupplierAdmin_var admin = ec->for_suppliers(); consumer = admin->obtain_push_consumer(); // Instantiate and register servant CPXEventSupplier_i servant(orb.in()); CORBA::Object_var poaObj = orb->resolve_initial_references("RootPOA"); PortableServer::POA_var poa = PortableServer::POA::_narrow(poaObj.in()); PortableServer::ObjectId_var oid = poa->activate_object(&servant); CORBA::Object_var supplierObj = poa->id_to_reference(oid.in()); RtecEventComm::PushSupplier_var supplier = RtecEventComm::PushSupplier::_narrow(supplierObj.in()); ACE_SupplierQOS_Factory qos; qos.insert(MY_SOURCE_ID, MY_EVENT_TYPE, 0 /*rt_info structure*/, 1 /*number of calls*/); // connect as supplier consumer->connect_push_supplier(supplier.in(), qos.get_SupplierQOS()); while(true) pause(); }catch(CORBA::Exception &any){ // std::cout<<"Exception occured: "<