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
128
|
#include "Notifier_Server.h"
#include "Event_CommC.h"
#include "tao/debug.h"
#include "tao/ORB_Core.h"
// Constructor.
Notifier_Server::Notifier_Server ()
{
}
// Destructor.
Notifier_Server::~Notifier_Server ()
{
}
int
Notifier_Server::close ()
{
try
{
// disconnect all the consumers.
this->servant_.disconnect ("notifier shutdown.");
// Name the object.
CosNaming::Name notifier_obj_name (1);
notifier_obj_name.length (1);
notifier_obj_name[0].id =
CORBA::string_dup (NOTIFIER_BIND_NAME);
this->naming_server_->unbind (notifier_obj_name);
// Instruct the ORB to shutdown.
this->orb_manager_.orb ()->shutdown ();
}
catch (const CORBA::Exception&)
{
return -1;
}
return 0;
}
// The naming service is initialized and the naming context as well as
// the object name is bound to the naming server.
int
Notifier_Server::init_naming_service ()
{
try
{
CORBA::ORB_var orb = this->orb_manager_.orb ();
TAO_debug_level = 1;
if (this->naming_server_.init (orb.in ()) == -1)
ACE_ERROR_RETURN ((LM_ERROR,
"Failed to initialize TAO_Naming_Server\n"),
-1);
// Register the object implementation with the POA.
Event_Comm::Notifier_var notifier_obj =
this->servant_._this ();
// Name the object.
CosNaming::Name notifier_obj_name (1);
notifier_obj_name.length (1);
notifier_obj_name[0].id =
CORBA::string_dup (NOTIFIER_BIND_NAME);
// Now, attach the object name to the context.
this->naming_server_->bind (notifier_obj_name,
notifier_obj.in ());
}
catch (const CORBA::Exception& ex)
{
ex._tao_print_exception ("Notifier_Server::init_naming_service\n");
return -1;
}
return 0;
}
// Initialize the server.
int
Notifier_Server::init (int argc,
ACE_TCHAR *argv[])
{
// Call the init of <TAO_ORB_Manager> to initialize the ORB and
// create the child poa under the root POA.
if (this->orb_manager_.init_child_poa (argc,
argv,
"child_poa") == -1)
ACE_ERROR_RETURN ((LM_ERROR,
"%p\n",
"init_child_poa"),
-1);
this->orb_manager_.activate_poa_manager ();
// Activate the servant in the POA.
CORBA::String_var str =
this->orb_manager_.activate_under_child_poa (NOTIFIER_BIND_NAME,
&this->servant_);
return this->init_naming_service ();
}
int
Notifier_Server::run ()
{
ACE_DEBUG ((LM_DEBUG,
"Running the notifier server...\n"));
// Run the main event loop for the ORB.
this->orb_manager_.run ();
return 0;
}
ACE_Reactor *
Notifier_Server::reactor ()
{
return TAO_ORB_Core_instance ()->reactor ();
}
|