blob: 8d6f413b51ba99151c1c698cd100fdb32f05b5a2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
/**
* \file Supplier.cpp
* \brief RTCORBA Client, sends ping commands to Receiver
*
* \author Manuel Traut
* \version 2009-06-23
*
*/
#include <iostream>
#include <string>
#include <unistd.h>
#include <orbsvcs/CosNamingC.h>
#include <tao/RTCORBA/RTCORBA.h>
#include "pingC.h"
static Linutronix::Ping_var ping;
static std::string str;
int main(int argc, char* argv[])
{
if (argc > 1)
str = argv[1];
else
str = "no argument given";
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 rt_orb = RTCORBA::RTORB::_narrow(rtorb.in());
std::cout<<"RTORB ok"<<std::endl;
// NamingService
CORBA::Object_var naming_obj =
orb->resolve_initial_references("NameService");
CosNaming::NamingContext_var naming_context =
CosNaming::NamingContext::_narrow(naming_obj.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 ping_obj = naming_context->resolve(name);
ping = Linutronix::Ping::_narrow(ping_obj.in());
std::cout<<"TransferOjekt ok"<<std::endl;
// Private Connection Policy
CORBA::PolicyList pc_policy(1);
pc_policy.length(1);
pc_policy[0] = rt_orb->create_private_connection_policy();
CORBA::Object_var new_tran =
ping->_set_policy_overrides(pc_policy, CORBA::SET_OVERRIDE);
ping = Linutronix::Ping::_narrow(new_tran.in());
std::cout<<"PrivateConnection ok"<<std::endl;
struct timespec time_tx;
struct timespec time_done;
for(unsigned int i = 0; i < 100; i++)
{
clock_gettime(CLOCK_MONOTONIC, &time_tx);
ping->send((const char*)str.c_str());
clock_gettime(CLOCK_MONOTONIC, &time_done);
std::cout<<time_tx.tv_sec<<":"<<time_tx.tv_nsec/1000<<"\n";
std::cout<<time_done.tv_sec<<":"<<time_done.tv_nsec/1000<<"\n\n";
}
// destroy ORB
orb->destroy();
} catch(CORBA::Exception &any) {
std::cout<<"Exception occured: "<<any<<std::endl;
}
return 0;
}
|