2
// AMI_Manager.cpp,v 1.7 2002/06/28 20:29:26 coryan Exp
5
#include "AMI_Manager.h"
7
ACE_RCSID(LongUpcalls, AMI_Manager, "AMI_Manager.cpp,v 1.7 2002/06/28 20:29:26 coryan Exp")
10
validate_connection(Test::Controller_ptr controller
16
#if (TAO_HAS_MESSAGING == 1)
17
CORBA::PolicyList_var unused;
18
controller->validate_connection(unused
19
ACE_ENV_ARG_PARAMETER);
22
controller->_is_a("Not_an_IDL_Type"
23
ACE_ENV_ARG_PARAMETER);
33
AMI_Manager::AMI_Manager (CORBA::ORB_ptr orb)
34
: orb_ (CORBA::ORB::_duplicate (orb))
39
AMI_Manager::start_workers (CORBA::Short worker_count,
40
CORBA::Long milliseconds,
41
Test::Controller_ptr controller
43
ACE_THROW_SPEC ((CORBA::SystemException))
45
ACE_Thread_Manager thread_manager;
47
validate_connection(controller
48
ACE_ENV_ARG_PARAMETER);
51
// ACE_DEBUG ((LM_DEBUG, "Starting %d workers\n", worker_count));
52
Worker worker (&thread_manager,
53
controller, milliseconds,
56
worker.activate (THR_NEW_LWP | THR_JOINABLE, worker_count);
58
thread_manager.wait ();
62
AMI_Manager::shutdown (ACE_ENV_SINGLE_ARG_DECL)
63
ACE_THROW_SPEC ((CORBA::SystemException))
65
this->orb_->shutdown (0 ACE_ENV_ARG_PARAMETER);
68
// ****************************************************************
70
Worker::Worker (ACE_Thread_Manager *thr_mgr,
71
Test::Controller_ptr controller,
72
CORBA::Long milliseconds,
74
: ACE_Task_Base (thr_mgr)
75
, controller_ (Test::Controller::_duplicate (controller))
76
, milliseconds_ (milliseconds)
77
, orb_ (CORBA::ORB::_duplicate (orb))
84
// ACE_DEBUG ((LM_DEBUG, "Worker starts\n"));
85
ACE_DECLARE_NEW_CORBA_ENV;
88
TAO_SYNCH_MUTEX mutex;
89
int pending_requests = 2;
90
Test::AMI_ControllerHandler_var handler;
93
Controller_Handler *handler_impl;
94
ACE_NEW_RETURN (handler_impl,
95
Controller_Handler (&mutex,
99
PortableServer::ServantBase_var auto_destroy (handler_impl);
100
handler = handler_impl->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
104
validate_connection(this->controller_.in()
105
ACE_ENV_ARG_PARAMETER);
108
this->controller_->sendc_worker_started (handler.in ()
109
ACE_ENV_ARG_PARAMETER);
112
// ACE_DEBUG ((LM_DEBUG, "Worker start reported\n"));
114
ACE_Time_Value tv (0, 1000 * this->milliseconds_);
117
this->controller_->sendc_worker_finished (handler.in ()
118
ACE_ENV_ARG_PARAMETER);
121
// ACE_DEBUG ((LM_DEBUG, "Worker completion reported\n"));
125
ACE_Time_Value tv (0, 1000 * this->milliseconds_);
126
this->orb_->run (tv ACE_ENV_ARG_PARAMETER);
129
ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, ace_mon, mutex, -1);
130
if (pending_requests == 0)
136
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
137
"Exception in svc() method\n");
143
// ****************************************************************
145
Controller_Handler::Controller_Handler (TAO_SYNCH_MUTEX *mutex,
146
int *pending_replies)
148
, pending_replies_ (pending_replies)
153
Controller_Handler::worker_started (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
154
ACE_THROW_SPEC ((CORBA::SystemException))
156
ACE_GUARD (TAO_SYNCH_MUTEX, ace_mon, *this->mutex_);
157
(*this->pending_replies_)--;
161
Controller_Handler::worker_started_excep
162
(Test::AMI_ControllerExceptionHolder* h
164
ACE_THROW_SPEC ((CORBA::SystemException))
168
h->raise_worker_started (ACE_ENV_SINGLE_ARG_PARAMETER);
173
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
174
"Controller_Handler exception raised in"
181
Controller_Handler::worker_finished (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
182
ACE_THROW_SPEC ((CORBA::SystemException))
184
ACE_GUARD (TAO_SYNCH_MUTEX, ace_mon, *this->mutex_);
185
(*this->pending_replies_)--;
189
Controller_Handler::worker_finished_excep
190
(Test::AMI_ControllerExceptionHolder *h
192
ACE_THROW_SPEC ((CORBA::SystemException))
196
h->raise_worker_finished (ACE_ENV_SINGLE_ARG_PARAMETER);
201
ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
202
"Controller_Handler exception raised in"