summaryrefslogtreecommitdiff
path: root/frameworks/middleware/examples/corba/Supplier.cpp
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;
}