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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
/**
* @file Peer_Base.cpp
*
* $Id$
*
* @author Carlos O'Ryan <coryan@uci.edu>
*/
#include "Peer_Base.h"
#include "RTServer_Setup.h"
#include "RIR_Narrow.h"
#include "Servant_var.h"
#include "RTEC_Initializer.h"
#include "EC_Destroyer.h"
#include "Auto_Disconnect.h"
#include "Loopback.h"
#include "orbsvcs/Event/EC_Event_Channel.h"
#include "orbsvcs/Event/EC_Gateway_IIOP.h"
ACE_RCSID (TAO_RTEC_Perf,
Peer_Base,
"$Id$")
Peer_Base::Peer_Base (CORBA::ORB_ptr orb,
RTServer_Setup &rtserver_setup)
: orb_ (CORBA::ORB::_duplicate (orb))
, poa_ (rtserver_setup.poa ())
{
Servant_var<TAO_EC_Event_Channel> ec_impl (
RTEC_Initializer::create (this->poa_.in (),
this->poa_.in (),
rtserver_setup.rtcorba_setup ())
);
ec_impl->activate ();
PortableServer::ObjectId_var ec_id =
this->poa_->activate_object (ec_impl.in ());
CORBA::Object_var ec_object =
this->poa_->id_to_reference (ec_id.in ());
this->event_channel_ =
RtecEventChannelAdmin::EventChannel::_narrow (ec_object.in ());
}
Peer_Base::~Peer_Base (void)
{
}
void
Peer_Base::shutdown (void)
{
{
EC_Destroyer ec_destroyer (this->event_channel_.in ());
this->event_channel_ =
RtecEventChannelAdmin::EventChannel::_nil ();
}
this->orb_->shutdown (0);
}
CORBA::Object_ptr
Peer_Base::channel (void)
{
return CORBA::Object::_duplicate (this->event_channel_.in ());
}
void
Peer_Base::connect (Federated_Test::Peer_ptr remote_peer)
{
ACE_DEBUG ((LM_DEBUG, "(%P|%t) Connecting....\n"));
CORBA::Object_var remote_ec_object =
remote_peer->channel ();
RtecEventChannelAdmin::EventChannel_var remote_ec =
RtecEventChannelAdmin::EventChannel::_narrow (remote_ec_object.in ());
Servant_var<TAO_EC_Gateway_IIOP> gateway (new TAO_EC_Gateway_IIOP);
gateway->init (remote_ec.in (),
this->event_channel_.in ());
RtecEventChannelAdmin::Observer_var observer =
gateway->_this ();
RtecEventChannelAdmin::Observer_Handle h =
this->event_channel_->append_observer (observer.in ());
gateway->observer_handle (h);
}
Federated_Test::Loopback_ptr
Peer_Base::setup_loopback (CORBA::Long experiment_id,
CORBA::Long base_event_type)
{
Servant_var<Loopback> loopback (
new Loopback (experiment_id,
base_event_type,
this->poa_.in (),
this->poa_.in (),
this->event_channel_.in ()));
Auto_Disconnect<Loopback> disconnect (loopback);
Federated_Test::Loopback_var lb =
loopback->_this ();
disconnect.release ();
return lb._retn ();
}
PortableServer::POA_ptr
Peer_Base::_default_POA (void)
{
return PortableServer::POA::_duplicate (this->poa_.in ());
}
|