diff options
Diffstat (limited to 'quellcode/versuch1/Supplier.cpp')
| -rwxr-xr-x | quellcode/versuch1/Supplier.cpp | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/quellcode/versuch1/Supplier.cpp b/quellcode/versuch1/Supplier.cpp new file mode 100755 index 0000000..6d94a11 --- /dev/null +++ b/quellcode/versuch1/Supplier.cpp @@ -0,0 +1,81 @@ +/** + * + * \file Supplier.cpp + * \brief RTCORBA Client, catches Signal on DIO changes and reports this changes via RTCORBA to the Receiver + * + * \author Manuel Traut + * \version 2006-10-15 + * + */ + +#include <iostream> +#include "benchC.h" +#include "orbsvcs/CosNamingC.h" +#include <tao/RTCORBA/RTCORBA.h> +#include <unistd.h> + +#include "cpx.h" + +benchmark::Put_var put; +CPX cpx; + +// Signal-Handler +void sigproc(int signo) +{ signal(SIGRTMIN+29, sigproc); + put->allPorts(cpx.get(1), cpx.get(2), cpx.get(3)); +} + + +int main(int argc, char* argv[]){ + + try{ + // initialize ORB + CORBA::ORB_var orb = CORBA::ORB_init(argc, argv, "ClientORB"); + std::cout<<"ORB ok"<<std::endl; + + // get RTORB + CORBA::Object_var rtorb = orb->resolve_initial_references("RTORB"); + RTCORBA::RTORB_var rtORB = RTCORBA::RTORB::_narrow(rtorb.in()); + std::cout<<"RTORB ok"<<std::endl; + + // NamingService + CORBA::Object_var namingObject = orb->resolve_initial_references("NameService"); + CosNaming::NamingContext_var namingContext = CosNaming::NamingContext::_narrow(namingObject.in()); + std::cout<<"NamingService ok"<<std::endl; + + CosNaming::Name name(1); + name.length(1); + name[0].id = CORBA::string_dup("Receiver"); + + // receive Object + CORBA::Object_var benchObj = namingContext->resolve(name); + put = benchmark::Put::_narrow(benchObj.in()); + std::cout<<"TransferOjekt ok"<<std::endl; + + // Private Connection Policy + CORBA::PolicyList pcPolicy(1); + pcPolicy.length(1); + pcPolicy[0] = rtORB->create_private_connection_policy(); + CORBA::Object_var newTran = put->_set_policy_overrides(pcPolicy, CORBA::SET_OVERRIDE); + put = benchmark::Put::_narrow(newTran.in()); + std::cout<<"PrivateConnection ok"<<std::endl; + + // Input auf Interface schreiben + put->connect(); + put->allPorts(0, 0, 0); + + // signal handling + signal(SIGRTMIN+29, sigproc); + + while(true){ + pause(); + } + + // destroy ORB + orb->destroy(); + + }catch(CORBA::Exception &any){ + std::cout<<"Exception occured: "<<any<<std::endl; + } + return 0; +} |
