summaryrefslogtreecommitdiff
path: root/quellcode/versuch2/ESSupplier.cpp
diff options
context:
space:
mode:
authorManuel Traut <manut@mecka.net>2014-03-31 16:53:55 +0200
committerManuel Traut <manut@mecka.net>2014-03-31 16:53:55 +0200
commit1adba473e6917b227e1b0a1118148101dca202e7 (patch)
tree13180ede9564ba50c528b274ee5719b4e030ef06 /quellcode/versuch2/ESSupplier.cpp
parenteacbf5bb4d57af21c731f41251015d3b991ad490 (diff)
add quellcodeHEADmaster
Signed-off-by: Manuel Traut <manut@mecka.net>
Diffstat (limited to 'quellcode/versuch2/ESSupplier.cpp')
-rwxr-xr-xquellcode/versuch2/ESSupplier.cpp106
1 files changed, 106 insertions, 0 deletions
diff --git a/quellcode/versuch2/ESSupplier.cpp b/quellcode/versuch2/ESSupplier.cpp
new file mode 100755
index 0000000..3099bac
--- /dev/null
+++ b/quellcode/versuch2/ESSupplier.cpp
@@ -0,0 +1,106 @@
+
+
+#include <orbsvcs/RtecEventCommC.h>
+#include <orbsvcs/RtecEventChannelAdminC.h>
+#include <orbsvcs/Time_Utilities.h>
+#include <orbsvcs/Event_Utilities.h>
+#include <orbsvcs/CosNamingC.h>
+
+#include <iostream>
+
+#include <unistd.h>
+#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"<<std::endl;
+
+ // NamingService
+ CORBA::Object_var namingObject = orb->resolve_initial_references("NameService");
+ CosNaming::NamingContextExt_var namingContext = CosNaming::NamingContextExt::_narrow(namingObject.in());
+ std::cout<<"NamingService ok"<<std::endl;
+
+ // Get EventService
+ CORBA::Object_var esObj = namingContext->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: "<<any<<std::endl;
+ }
+ return 0;
+}