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
118
119
120
121
122
123
124
125
126
127
|
// $Id$
//============================================================================
//
// =FILENAME
// Collocation_Test.h
//
// =DESCRIPTION
// Server class to perform testing of TAO's collocation mechanism.
//
// =AUTHOR
// Nanbor Wang
//
//=============================================================================
#include "Collocation_Tester.h"
Collocation_Test::Collocation_Test (void)
{
// no-op.
}
void
Collocation_Test::shutdown (void)
{
this->root_poa_->destroy (1, 1);
this->orb_->destroy ();
}
int
Collocation_Test::init (int argc, char *argv[])
{
// Initialize the ORB.
this->orb_ = CORBA::ORB_init (argc, argv);
int result = this->parse_args (argc, argv);
if (result != 0)
return result;
// Get an Object reference to RootPOA.
CORBA::Object_var obj =
this->orb_->resolve_initial_references ("RootPOA");
// Narrow the Object reference to a POA reference
this->root_poa_ =
PortableServer::POA::_narrow (obj.in ());
// Get the POAManager of RootPOA
this->poa_manager_ =
this->root_poa_->the_POAManager ();
// Activate the diamond servant and its base classes under RootPOA.
PortableServer::ObjectId_var id =
this->root_poa_->activate_object (&this->top_servant_);
// // We only care about the most derived class here.
// this->diamond_obj_ = this->diamond_servant_._this ();
id =
this->root_poa_->activate_object (&this->diamond_servant_);
// We only care about the most derived class here.
this->diamond_obj_ = this->root_poa_->id_to_reference (id.in ());
id =
this->root_poa_->activate_object (&this->left_servant_);
id =
this->root_poa_->activate_object (&this->right_servant_);
CORBA::String_var str =
this->orb_->object_to_string (this->diamond_obj_.in ());
ACE_DEBUG ((LM_DEBUG, "Diamond Servant activated:\n %s\n",
str.in()));
return 0;
}
int
Collocation_Test::parse_args (int /*argc*/,
char *[] /*argv*/)
{
return 0;
}
int
Collocation_Test::test_narrow (void)
{
Diamond::Top_var top =
Diamond::Top::_narrow (this->diamond_obj_.in ());
Diamond::Left_var left =
Diamond::Left::_narrow (this->diamond_obj_.in ());
Diamond::Right_var right =
Diamond::Right::_narrow (this->diamond_obj_.in ());
Diamond::Buttom_var buttom =
Diamond::Buttom::_narrow (this->diamond_obj_.in ());
CORBA::String_var str = top->shape ();
ACE_DEBUG ((LM_DEBUG, "Calling top->shape: %s\n", str.in ()));
str = left->shape ();
ACE_DEBUG ((LM_DEBUG, "Calling left->shape: %s\n", str.in ()));
str = right->shape ();
ACE_DEBUG ((LM_DEBUG, "Calling right->shape: %s\n", str.in ()));
str = buttom->shape ();
ACE_DEBUG ((LM_DEBUG, "Calling buttom->shape: %s\n", str.in ()));
return 0;
}
int
Collocation_Test::run (void)
{
this->poa_manager_->activate ();
this->test_narrow ();
return 0;
}
|