diff options
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/CosEvent_Utilities.cpp')
-rw-r--r-- | TAO/orbsvcs/orbsvcs/CosEvent_Utilities.cpp | 458 |
1 files changed, 0 insertions, 458 deletions
diff --git a/TAO/orbsvcs/orbsvcs/CosEvent_Utilities.cpp b/TAO/orbsvcs/orbsvcs/CosEvent_Utilities.cpp deleted file mode 100644 index 4830fd074c2..00000000000 --- a/TAO/orbsvcs/orbsvcs/CosEvent_Utilities.cpp +++ /dev/null @@ -1,458 +0,0 @@ -// -*- C++ -*- -// $Id$ - -#include "CosEvent_Utilities.h" -#include "orbsvcs/Event/EC_Event_Channel.h" -#include "orbsvcs/CosEvent/EventChannel_i.h" -#include "orbsvcs/Event_Service_Constants.h" -#include "ace/Auto_Ptr.h" - -CosEC_ServantBase::CosEC_ServantBase (void) - :poa_ (PortableServer::POA::_nil ()), - rtec_servant_ (0), - cosec_servant_ (0), - rtec_ (RtecEventChannelAdmin::EventChannel::_nil ()), - cosec_ (CosEventChannelAdmin::EventChannel::_nil ()), - eventTypeIds_ (0), - eventSourceIds_ (0), - source_type_pairs_ (0) -{ - // No-Op. -} - -CosEC_ServantBase::~CosEC_ServantBase (void) -{ - // No-Op. -#if 0 - ACE_DEBUG ((LM_DEBUG, "in cosec servant base %d \n", this)); -#endif -} - -void -CosEC_ServantBase::init (PortableServer::POA_ptr thispoa, - PortableServer::POA_ptr poa, - char *, - char *, - char *, - CORBA::Environment &ACE_TRY_ENV) -{ - ACE_ASSERT (!CORBA::is_nil (thispoa)); - ACE_ASSERT (!CORBA::is_nil (poa)); - - // Save the POA refs. - this->thispoa_ = PortableServer::POA::_duplicate (thispoa); - this->poa_ = PortableServer::POA::_duplicate (poa); - - auto_ptr<POA_RtecEventChannelAdmin::EventChannel> - auto_rtec_servant_ (this->create_rtec (ACE_TRY_ENV)); - ACE_CHECK; - - auto_ptr<TAO_CosEC_EventChannel_i> - auto_cosec_servant_ (this->create_cosec (ACE_TRY_ENV)); - ACE_CHECK; - - // if all the servants were allocated then set the class pointers. - this->rtec_servant_ = auto_rtec_servant_.release (); - this->cosec_servant_ = auto_cosec_servant_.release (); -} - -int -CosEC_ServantBase::activate (CORBA::Environment &ACE_TRY_ENV) -{ - ACE_ASSERT (!CORBA::is_nil (this->poa_.in ())); - ACE_ASSERT (!CORBA::is_nil (this->thispoa_.in ())); - - // Activate the Rtec - this->activate_rtec (ACE_TRY_ENV); - ACE_CHECK_RETURN (-1); - - // Activate the CosEC - if (this->activate_cosec (ACE_TRY_ENV) != 0) - return -1; - ACE_CHECK_RETURN (-1); - - // Activate ourselves.. - // Note that the POA is <thispoa_> - - PortableServer::ObjectId_var oid = - this->thispoa_->activate_object (this, - ACE_TRY_ENV); - ACE_CHECK_RETURN (-1); - - this->_remove_ref (ACE_TRY_ENV); - ACE_CHECK_RETURN (-1); - - CORBA::Object_var obj = - this->thispoa_->id_to_reference (oid.in (), - ACE_TRY_ENV); - ACE_CHECK_RETURN (-1); - - return 0; // success. -} - -int -CosEC_ServantBase::activate (const char* servant_id, - CORBA::Environment &ACE_TRY_ENV) -{ - ACE_ASSERT (!CORBA::is_nil (this->poa_.in ())); - ACE_ASSERT (!CORBA::is_nil (this->thispoa_.in ())); - - // Activate the Rtec - this->activate_rtec (ACE_TRY_ENV); - ACE_CHECK_RETURN (-1); - - // Activate the CosEC - if (this->activate_cosec (ACE_TRY_ENV) != 0) - return -1; - ACE_CHECK_RETURN (-1); - - - PortableServer::ObjectId_var oid = - TAO_POA::string_to_ObjectId (servant_id); - - // Activate ourselves. - // Note that the POA is <thispoa_> - this->thispoa_->activate_object_with_id (oid.in (), - this, - ACE_TRY_ENV); - ACE_CHECK_RETURN (-1); - - this->_remove_ref (ACE_TRY_ENV); - ACE_CHECK_RETURN (-1); - - CORBA::Object_var obj = - this->thispoa_->id_to_reference (oid.in (), - ACE_TRY_ENV); - ACE_CHECK_RETURN (-1); - - return 0; // success. -} - -void -CosEC_ServantBase::activate_rtec (CORBA::Environment &ACE_TRY_ENV) -{ - // Activate the Rtec - PortableServer::ObjectId_var oid = - this->poa_->activate_object (this->rtec_servant_, - ACE_TRY_ENV); - ACE_CHECK; - - this->rtec_servant_->_remove_ref (ACE_TRY_ENV); - ACE_CHECK; - - CORBA::Object_var obj = - this->poa_->id_to_reference (oid.in (), - ACE_TRY_ENV); - ACE_CHECK; - - this->rtec_ = - RtecEventChannelAdmin::EventChannel::_narrow (obj.in ()); -} - -int -CosEC_ServantBase::activate_cosec (CORBA::Environment &ACE_TRY_ENV) -{ - // Initialize the CosEC servant. - RtecScheduler::handle_t supp_handle = 0; - - this->init_SupplierQOS (supp_handle, - this->supplier_qos_, - this->source_type_pairs_); - - RtecScheduler::handle_t cons_handle = 0; - - this->init_ConsumerQOS (cons_handle, - this->consumer_qos_, - this->eventTypeIds_, - this->eventSourceIds_); - - const RtecEventChannelAdmin::ConsumerQOS &consumerqos = - this->consumer_qos_.get_ConsumerQOS (); - - const RtecEventChannelAdmin::SupplierQOS &supplierqos = - this->supplier_qos_.get_SupplierQOS (); - - if (this->cosec_servant_->init (consumerqos, - supplierqos, - this->rtec_.in (), - ACE_TRY_ENV) != 0) - return -1; - ACE_CHECK_RETURN (-1); - - // Activate the CosEC - PortableServer::ObjectId_var oid = - this->poa_->activate_object (this->cosec_servant_, - ACE_TRY_ENV); - ACE_CHECK_RETURN (-1); - - this->cosec_servant_->_remove_ref (ACE_TRY_ENV); - ACE_CHECK_RETURN (-1); - - CORBA::Object_var obj = - this->poa_->id_to_reference (oid.in (), - ACE_TRY_ENV); - ACE_CHECK_RETURN (-1); - - this->cosec_ = - CosEventChannelAdmin::EventChannel::_narrow (obj.in ()); - return 0; // success -} - -void -CosEC_ServantBase::deactivate (CORBA::Environment &ACE_TRY_ENV) -{ - // Deactivate all those we control... - this->deactivate_rtec (ACE_TRY_ENV); - ACE_CHECK; - - this->deactivate_cosec (ACE_TRY_ENV); - ACE_CHECK; - - // Finally we go away.. - PortableServer::ObjectId_var oid = - this->thispoa_->servant_to_id (this, - ACE_TRY_ENV); - ACE_CHECK; - - // deactivate from the poa. - this->thispoa_->deactivate_object (oid.in (), - ACE_TRY_ENV); - ACE_CHECK; -} - -void -CosEC_ServantBase::deactivate_rtec (CORBA::Environment &ACE_TRY_ENV) -{ - // Deactivate the rtec. - PortableServer::ObjectId_var oid = - this->poa_->servant_to_id (this->rtec_servant_, - ACE_TRY_ENV); - ACE_CHECK; - - // deactivate from the poa. - this->poa_->deactivate_object (oid.in (), - ACE_TRY_ENV); - ACE_CHECK; -} - -void -CosEC_ServantBase::deactivate_cosec (CORBA::Environment &ACE_TRY_ENV) -{ - // Deactivate the cosec. - PortableServer::ObjectId_var oid = - this->poa_->servant_to_id (this->cosec_servant_, - ACE_TRY_ENV); - ACE_CHECK; - - // deactivate from the poa. - this->poa_->deactivate_object (oid.in (), - ACE_TRY_ENV); - ACE_CHECK; -} - -CosEventChannelAdmin::ConsumerAdmin_ptr -CosEC_ServantBase::for_consumers (CORBA::Environment &ACE_TRY_ENV) - ACE_THROW_SPEC ((CORBA::SystemException)) -{ - return this->cosec_->for_consumers (ACE_TRY_ENV); -} - -CosEventChannelAdmin::SupplierAdmin_ptr -CosEC_ServantBase::for_suppliers (CORBA::Environment &ACE_TRY_ENV) - ACE_THROW_SPEC ((CORBA::SystemException)) -{ - return this->cosec_->for_suppliers (ACE_TRY_ENV); -} - -void -CosEC_ServantBase::destroy (CORBA::Environment &ACE_TRY_ENV) - ACE_THROW_SPEC ((CORBA::SystemException)) -{ - // Deactivate all the contained servants and ourselves. - // The poa will "destroy" the ref counted servants. - - this->deactivate (ACE_TRY_ENV); - ACE_CHECK; -} - -POA_RtecEventChannelAdmin::EventChannel_ptr -CosEC_ServantBase::create_rtec (CORBA::Environment &ACE_TRY_ENV) -{ - // Create the RtEC servant. - TAO_EC_Event_Channel_Attributes attr (this->poa_.in (), - this->poa_.in ()); - TAO_EC_Event_Channel* _rtec_servant; - ACE_NEW_THROW_EX (_rtec_servant, - TAO_EC_Event_Channel (attr), - CORBA::NO_MEMORY ()); - ACE_CHECK_RETURN (0); - - return _rtec_servant; -} - -TAO_CosEC_EventChannel_i* -CosEC_ServantBase::create_cosec (CORBA::Environment &ACE_TRY_ENV) -{ - // Create the CosEC servant. - TAO_CosEC_EventChannel_i* _cosec_servant; - ACE_NEW_THROW_EX (_cosec_servant, - TAO_CosEC_EventChannel_i (), - CORBA::NO_MEMORY ()); - ACE_CHECK_RETURN (0); - - return _cosec_servant; -} - -void -CosEC_ServantBase::init_SupplierQOS (RtecScheduler::handle_t supp_handle, - ACE_SupplierQOS_Factory &supplier_qos, - char *source_type_pairs) -{ - // @@ Pradeep: It is very important that you make the type of - // events generated by the CosEC an option. - // I know this is not very well documented, but the type should - // be >= ACE_ES_EVENT_UNDEFINED = 16 - // Something else: please make the EventSourceID for the - // supplier also an option... - - const char *c = " "; // space - char *tok = 0; - - // if nothing was specified on the command line use defaults.. - if (source_type_pairs == 0) - supplier_qos.insert (1, - ACE_ES_EVENT_ANY, - supp_handle, - 1); - else // parse the event types.. - { - tok = ACE_OS::strtok (source_type_pairs, c); - if (tok == 0) // error - { - ACE_DEBUG ((LM_DEBUG, "error parsing source,event pairs for SupplierQOS, defaulting to source id = 1, eventid = ACE_ES_EVENT_ANY")); - - supplier_qos.insert (1, - ACE_ES_EVENT_ANY, - supp_handle, - 1); - } - else - // we just use 1 source-type pair in the event channel. - // so scan for the 1st pair only. - { - int source_val = 0, type_val = 0; - source_val = ACE_OS::atoi (tok); - - tok = ACE_OS::strtok (0, c); - - if (tok != 0) - type_val = ACE_OS::atoi (tok); - - ACE_DEBUG ((LM_DEBUG, "supplier_qos::insert (%d, %d)\n", - source_val, type_val)); - - // Setup the QOS params.. - supplier_qos.insert (source_val, - type_val, - supp_handle, - 1); - } - } -} - -void -CosEC_ServantBase::init_ConsumerQOS (RtecScheduler::handle_t cons_handle, - ACE_ConsumerQOS_Factory &consumer_qos, - char *eventTypeIds, - char *eventSourceIds - ) -{ - // @@ Pradeep: ditto here, make the set of sources (and/or type) - // a parameter, and make sure the user can specify multiple of - // them (just call insert_source() or insert_type() in the - // parse_args routine). - - const char *c = " "; // space - char *tok = 0; - - consumer_qos.start_disjunction_group (); - - // insert the event ids first.. - - // if nothing was specified on the command line use defaults.. - if (eventTypeIds == 0) - { - //consumer_qos.insert_type (ACE_ES_EVENT_ANY, // default - // cons_handle); - // @@ if i uncomment this line then the Rtec displays the message - // "Consumer tried to register for allevents! This is not implemented." - // whenever a consumer tries to register with it. - } - else // parse the event types.. - { - tok = ACE_OS::strtok (eventTypeIds, c); - if (tok == 0) // error - { - ACE_DEBUG ((LM_DEBUG, "error parsing eventIds for ConsumerQOS, defaulting to 1")); - consumer_qos.insert_type (ACE_ES_EVENT_ANY, - cons_handle); - } - else - do - { - int type_val = ACE_OS::atoi (tok); - ACE_DEBUG ((LM_DEBUG, "consumer_qos::insert_type (%d)\n", - type_val)); - consumer_qos.insert_type (type_val, - cons_handle); - tok = ACE_OS::strtok (0, c); - } - while (tok != 0); - } - - // repeat for source ids.. - - // if nothing was specified on the command line use defaults.. - if (eventSourceIds == 0) - consumer_qos.insert_source (1, // default = 1 - cons_handle); - else // parse the event types.. - { - tok = ACE_OS::strtok (eventSourceIds, c); - if (tok == 0) // error - { - ACE_DEBUG ((LM_DEBUG, "error parsing sourceIds for ConsumerQOS, defaulting to 1")); - consumer_qos.insert_source (1, // default = 1 - cons_handle); - } - else - do - { - int source_val = ACE_OS::atoi (tok); - ACE_DEBUG ((LM_DEBUG, "consumer_qos::insert_source (%d)\n", - source_val)); - consumer_qos.insert_type (source_val, - cons_handle); - tok = ACE_OS::strtok (0, c); - } - while (tok != 0); - } -} - -#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) - -template class auto_ptr <POA_RtecEventChannelAdmin::EventChannel>; -template class ACE_Auto_Basic_Ptr <POA_RtecEventChannelAdmin::EventChannel>; - -template class auto_ptr <TAO_CosEC_EventChannel_i>; -template class ACE_Auto_Basic_Ptr <TAO_CosEC_EventChannel_i>; - -#elif defined(ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) - -#pragma instantiate auto_ptr <POA_RtecEventChannelAdmin::EventChannel> -#pragma instantiate ACE_Auto_Basic_Ptr <POA_RtecEventChannelAdmin::EventChannel> - -#pragma instantiate auto_ptr <TAO_CosEC_EventChannel_i> -#pragma instantiate ACE_Auto_Basic_Ptr <TAO_CosEC_EventChannel_i> - -#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */ |