diff options
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/Notify/Notify_ProxySupplier_T.cpp')
-rw-r--r-- | TAO/orbsvcs/orbsvcs/Notify/Notify_ProxySupplier_T.cpp | 499 |
1 files changed, 0 insertions, 499 deletions
diff --git a/TAO/orbsvcs/orbsvcs/Notify/Notify_ProxySupplier_T.cpp b/TAO/orbsvcs/orbsvcs/Notify/Notify_ProxySupplier_T.cpp deleted file mode 100644 index 3de9a2d04c8..00000000000 --- a/TAO/orbsvcs/orbsvcs/Notify/Notify_ProxySupplier_T.cpp +++ /dev/null @@ -1,499 +0,0 @@ -// $Id$ - -#ifndef TAO_NOTIFY_PROXYSUPPLIER_T_C -#define TAO_NOTIFY_PROXYSUPPLIER_T_C - -#include "Notify_ProxySupplier_T.h" -#include "Notify_Event_Manager.h" -#include "Notify_ConsumerAdmin_i.h" -#include "Notify_Factory.h" -#include "Notify_Channel_Objects_Factory.h" -#include "Notify_Event_Manager_Objects_Factory.h" -#include "Notify_Worker_Task.h" -#include "Notify_AdminProperties.h" - -ACE_RCSID (Notify, - Notify_ProxySupplier_T, - "$Id$") - -template <class SERVANT_TYPE> -TAO_Notify_ProxySupplier<SERVANT_TYPE>::TAO_Notify_ProxySupplier (TAO_Notify_ConsumerAdmin_i* consumer_admin) - :consumer_admin_ (consumer_admin), - is_suspended_ (0), - dispatching_task_ (0), - filter_eval_task_ (0) -{ - this->event_manager_ = consumer_admin->get_event_manager (); -} - -template <class SERVANT_TYPE> void -TAO_Notify_ProxySupplier<SERVANT_TYPE>::init (CosNotifyChannelAdmin::ProxyID proxy_id ACE_ENV_ARG_DECL) -{ - consumer_admin_->_add_ref (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK; - - this->proxy_id_ = proxy_id; - - TAO_Notify_CO_Factory* cof = - TAO_Notify_Factory::get_channel_objects_factory (); - - this->lock_ = cof->create_proxy_supplier_lock (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK; - - TAO_Notify_EMO_Factory* event_manager_objects_factory = - this->event_manager_->resource_factory (); - - // Create the task to forward filtering/dispatching commands to: - this->dispatching_task_ = - event_manager_objects_factory->create_dispatching_task (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK; - - this->filter_eval_task_ = - event_manager_objects_factory->create_listener_eval_task (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK; - - // Get hold of the admin properties. - TAO_Notify_AdminProperties* const admin_properties = - this->event_manager_->admin_properties (); - - // Init the tasks - this->dispatching_task_->init_task (admin_properties, - &(this->qos_admin_)); - this->filter_eval_task_->init_task (admin_properties, - &(this->qos_admin_)); - - { - TAO_Notify_EventType& special_type = - TAO_Notify_EventType::special_event_type (); - - CosNotification::EventTypeSeq added (1), removed (0); - - added.length (1); - removed.length (0); - - added[0] = special_type.get_native (); - - this->subscription_change (added, removed ACE_ENV_ARG_PARAMETER); - ACE_CHECK; - } -} - -// Implementation skeleton destructor -template <class SERVANT_TYPE> -TAO_Notify_ProxySupplier<SERVANT_TYPE>::~TAO_Notify_ProxySupplier (void) -{ - ACE_DECLARE_NEW_CORBA_ENV; - this->event_manager_->unregister_from_publication_updates (this - ACE_ENV_ARG_PARAMETER); - ACE_CHECK; - - // unsubscribe it to our current subscriptions. - CosNotification::EventTypeSeq added (0); - CosNotification::EventTypeSeq removed (this->subscription_list_.size ()); - - this->subscription_list_.populate (removed); - added.length (0); - - this->event_manager_->subscribe_for_events (this, - added, removed ACE_ENV_ARG_PARAMETER); - ACE_CHECK; - - delete this->lock_; - - this->consumer_admin_->proxy_pushsupplier_destroyed (this->proxy_id_); - - consumer_admin_->_remove_ref (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK; - - TAO_Notify_EMO_Factory* event_manager_objects_factory = - this->event_manager_->resource_factory (); - - event_manager_objects_factory->destroy_dispatching_task (this->dispatching_task_); - event_manager_objects_factory->destroy_source_eval_task (this->filter_eval_task_); -} - -template <class SERVANT_TYPE> CORBA::Boolean -TAO_Notify_ProxySupplier<SERVANT_TYPE>::evaluate_filter (TAO_Notify_Event &event, CORBA::Boolean eval_parent ACE_ENV_ARG_DECL) -{ - if (eval_parent == 1) - { - CosNotifyChannelAdmin::InterFilterGroupOperator filter_operator = - consumer_admin_->MyOperator (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN (0); - // Inter-filter group operator. - - CORBA::Boolean bval = - this->consumer_admin_->get_filter_admin ().match (event ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (0); - - if ((bval == 1 && filter_operator == CosNotifyChannelAdmin::AND_OP) || - (bval == 0 && filter_operator == CosNotifyChannelAdmin::OR_OP)) - { - bval = this->filter_admin_.match (event ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (0); - return bval; - } - else if (bval == 1 && filter_operator == CosNotifyChannelAdmin::OR_OP) - { - return 1; - } - else - { - return 0; - } - } - else - { - int status = this->filter_admin_.match (event ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (0); - return status; - } -} - -template <class SERVANT_TYPE> void -TAO_Notify_ProxySupplier<SERVANT_TYPE>::dispatch_event (TAO_Notify_Event &event ACE_ENV_ARG_DECL) -{ - if (this->is_connected_ == 0) - { - ACE_DEBUG ((LM_DEBUG,"%t, %P", - "dispatch_event to disconnected proxy supplier from EC\n")); - return; - } - - if (this->is_suspended_ == 1) - { - ACE_GUARD_THROW_EX (ACE_Lock, ace_mon, *this->lock_, - CORBA::INTERNAL ()); - ACE_CHECK; - - this->event_list_.enqueue_tail (event.clone ()); - } - else - { - if (TAO_debug_level > 0) - ACE_DEBUG ((LM_DEBUG, "Notify (%P|%t) - " - "dispatching event\n")); - this->dispatch_event_i (event ACE_ENV_ARG_PARAMETER); - ACE_CHECK; - } -} - -template <class SERVANT_TYPE> TAO_Notify_Worker_Task* -TAO_Notify_ProxySupplier<SERVANT_TYPE>::event_dispatch_task (void) -{ - return this->dispatching_task_; -} - -template <class SERVANT_TYPE> TAO_Notify_Worker_Task* -TAO_Notify_ProxySupplier<SERVANT_TYPE>::filter_eval_task (void) -{ - return this->filter_eval_task_; -} - -template <class SERVANT_TYPE> void -TAO_Notify_ProxySupplier<SERVANT_TYPE>::subscription_change ( - const CosNotification::EventTypeSeq & added, - const CosNotification::EventTypeSeq & removed - ACE_ENV_ARG_DECL - ) - ACE_THROW_SPEC ((CORBA::SystemException, - CosNotifyComm::InvalidEventType)) -{ - TAO_Notify_EventType_List seq_added, seq_removed; - - seq_added.insert_seq (added); - seq_removed.insert_seq (removed); - - { - ACE_GUARD_THROW_EX (ACE_Lock, ace_mon, *this->lock_, - CORBA::INTERNAL ()); - ACE_CHECK; - - TAO_Notify_EventType_List::preprocess (this->subscription_list_, seq_added, seq_removed); - } - - if (this->is_connected_ == 1) - { - CosNotification::EventTypeSeq p_added, p_removed; - - seq_added.populate (p_added); - seq_removed.populate (p_removed); - - this->event_manager_->subscribe_for_events (this, - p_added, p_removed ACE_ENV_ARG_PARAMETER); - ACE_CHECK; - - - if (TAO_debug_level > 0) - { - ACE_DEBUG ((LM_DEBUG, - "ProxySupplier %d: added following types: ", - proxy_id_ )); - - CORBA::ULong i = 0; - - for (i = 0; i < p_added.length (); ++i) - { - ACE_DEBUG ((LM_DEBUG, - "(%s, %s)\t", - p_added[i].domain_name.in(), - p_added[i].type_name.in())); - } - - ACE_DEBUG ((LM_DEBUG,"\n ProxySupplier %d: removed following types: ",proxy_id_ )); - - for (i = 0; i < p_removed.length (); ++i) - { - ACE_DEBUG ((LM_DEBUG, - "(%s, %s)\t", - p_removed[i].domain_name.in(), - p_removed[i].type_name.in())); - } - - CosNotification::EventTypeSeq current; - this->subscription_list_.populate (current); - - ACE_DEBUG ((LM_DEBUG, - "\n ProxySupplier %d:current subscriptions: ", - proxy_id_ )); - - for (i = 0; i < current.length (); ++i) - { - ACE_DEBUG ((LM_DEBUG, - "(%s, %s)\n", - current[i].domain_name.in(), - current[i].type_name.in())); - } - } - } -} - -template <class SERVANT_TYPE> void -TAO_Notify_ProxySupplier<SERVANT_TYPE>::on_connected (ACE_ENV_SINGLE_ARG_DECL) -{ - // Get hold of the admin properties. - TAO_Notify_AdminProperties* const admin_properties = - this->event_manager_->admin_properties (); - - TAO_Notify_Property_Long* const consumer_count = - admin_properties->consumers (); - - if (admin_properties->max_consumers () != 0 && - consumer_count->value () >= admin_properties->max_consumers ()) - ACE_THROW (CORBA::IMP_LIMIT ()); // we've reached the limit of consumers connected. - - // register with CA - this->consumer_admin_->register_listener (this ACE_ENV_ARG_PARAMETER); - ACE_CHECK; - - CosNotification::EventTypeSeq added; - - CosNotification::EventTypeSeq removed (0); - removed.length (0); - - // subscribe it to our current subscriptions. - added.length (this->subscription_list_.size ()); - - this->subscription_list_.populate (added); - - this->event_manager_->subscribe_for_events (this, - added, - removed - ACE_ENV_ARG_PARAMETER); - ACE_CHECK; - - this->event_manager_->register_for_publication_updates (this ACE_ENV_ARG_PARAMETER); - ACE_CHECK; - - (*consumer_count)++; -} - -template <class SERVANT_TYPE> void -TAO_Notify_ProxySupplier<SERVANT_TYPE>::on_disconnected (ACE_ENV_SINGLE_ARG_DECL) -{ - { - ACE_GUARD_THROW_EX (ACE_Lock, ace_mon, *this->lock_, - CORBA::INTERNAL ()); - ACE_CHECK; - - if (this->is_connected_ == 0) - return; - - this->is_connected_ = 0; - } - - CosNotification::EventTypeSeq removed; - - CosNotification::EventTypeSeq added (0); - added.length (0); - - // unsubscribe it to our current subscriptions. - removed.length (this->subscription_list_.size ()); - - this->subscription_list_.populate (removed); - - this->event_manager_->subscribe_for_events (this, - added, removed ACE_ENV_ARG_PARAMETER); - ACE_CHECK; - - this->event_manager_->unregister_from_publication_updates (this ACE_ENV_ARG_PARAMETER); - ACE_CHECK; - - // shutdown the tasks. - - this->dispatching_task_->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK; - - this->filter_eval_task_->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK; - - // Get hold of the admin properties. - TAO_Notify_AdminProperties* const admin_properties = - this->event_manager_->admin_properties (); - - (*(admin_properties->consumers ()))--; -} - -template <class SERVANT_TYPE> void -TAO_Notify_ProxySupplier<SERVANT_TYPE>::suspend_connection (ACE_ENV_SINGLE_ARG_DECL_NOT_USED/*ACE_ENV_SINGLE_ARG_PARAMETER*/) - ACE_THROW_SPEC (( - CORBA::SystemException, - CosNotifyChannelAdmin::ConnectionAlreadyInactive, - CosNotifyChannelAdmin::NotConnected - )) -{ - this->is_suspended_ = 1; -} - -template <class SERVANT_TYPE> void -TAO_Notify_ProxySupplier<SERVANT_TYPE>::resume_connection (ACE_ENV_SINGLE_ARG_DECL) - ACE_THROW_SPEC (( - CORBA::SystemException, - CosNotifyChannelAdmin::ConnectionAlreadyActive, - CosNotifyChannelAdmin::NotConnected - )) -{ - TAO_Notify_Event* event; - - this->is_suspended_ = 0; - - { - ACE_GUARD_THROW_EX (ACE_Lock, ace_mon, *this->lock_, - CORBA::INTERNAL ()); - ACE_CHECK; - - while (this->event_list_.dequeue_head (event) == 0) - { - this->dispatch_event_i (*event ACE_ENV_ARG_PARAMETER); - ACE_CHECK; - - delete event; - } - } -} - -template <class SERVANT_TYPE> CosNotifyChannelAdmin::ConsumerAdmin_ptr -TAO_Notify_ProxySupplier<SERVANT_TYPE>::MyAdmin (ACE_ENV_SINGLE_ARG_DECL) - ACE_THROW_SPEC (( - CORBA::SystemException - )) -{ - return this->consumer_admin_->get_ref (ACE_ENV_SINGLE_ARG_PARAMETER); -} - -template <class SERVANT_TYPE> CosNotifyFilter::MappingFilter_ptr -TAO_Notify_ProxySupplier<SERVANT_TYPE>::priority_filter (ACE_ENV_SINGLE_ARG_DECL) - ACE_THROW_SPEC (( - CORBA::SystemException - )) -{ - ACE_THROW_RETURN (CORBA::NO_IMPLEMENT (), - CosNotifyFilter::MappingFilter::_nil ()); -} - -template <class SERVANT_TYPE> void -TAO_Notify_ProxySupplier<SERVANT_TYPE>::priority_filter (CosNotifyFilter::MappingFilter_ptr /*priority_filter*/ ACE_ENV_ARG_DECL) - ACE_THROW_SPEC (( - CORBA::SystemException - )) -{ - ACE_THROW (CORBA::NO_IMPLEMENT ()); -} - -template <class SERVANT_TYPE> CosNotifyFilter::MappingFilter_ptr -TAO_Notify_ProxySupplier<SERVANT_TYPE>::lifetime_filter (ACE_ENV_SINGLE_ARG_DECL) - ACE_THROW_SPEC (( - CORBA::SystemException - )) -{ - ACE_THROW_RETURN (CORBA::NO_IMPLEMENT (), - CosNotifyFilter::MappingFilter::_nil ()); -} - -template <class SERVANT_TYPE> void -TAO_Notify_ProxySupplier<SERVANT_TYPE>::lifetime_filter (CosNotifyFilter::MappingFilter_ptr /*lifetime_filter*/ ACE_ENV_ARG_DECL) - ACE_THROW_SPEC (( - CORBA::SystemException - )) -{ - ACE_THROW (CORBA::NO_IMPLEMENT ()); -} - -template <class SERVANT_TYPE> CosNotification::EventTypeSeq* -TAO_Notify_ProxySupplier<SERVANT_TYPE>::obtain_offered_types (CosNotifyChannelAdmin::ObtainInfoMode mode ACE_ENV_ARG_DECL) - ACE_THROW_SPEC (( - CORBA::SystemException - )) -{ - CosNotification::EventTypeSeq* event_type_seq = 0; - - if (mode == CosNotifyChannelAdmin::ALL_NOW_UPDATES_OFF || - mode == CosNotifyChannelAdmin::ALL_NOW_UPDATES_ON) - { - event_type_seq = this->event_manager_->obtain_offered_types (); - } - - if (mode == CosNotifyChannelAdmin::NONE_NOW_UPDATES_ON || - mode == CosNotifyChannelAdmin::ALL_NOW_UPDATES_ON) - { - // if updates are currently off, switch them on. - if (this->updates_on_ == 0) - this->event_manager_->register_for_publication_updates (this - ACE_ENV_ARG_PARAMETER); - } - else - { - // if updates are currently on, switch them off. - if (this->updates_on_ == 1) - this->event_manager_->unregister_from_publication_updates (this - ACE_ENV_ARG_PARAMETER); - } - return event_type_seq; -} - -template <class SERVANT_TYPE> void -TAO_Notify_ProxySupplier<SERVANT_TYPE>::set_qos ( - const CosNotification::QoSProperties & qos - ACE_ENV_ARG_DECL) - ACE_THROW_SPEC (( - CORBA::SystemException, - CosNotification::UnsupportedQoS - )) -{ - // Call our base class set_qos (). - TAO_Notify_Proxy<SERVANT_TYPE>::set_qos (qos ACE_ENV_ARG_PARAMETER); - ACE_CHECK; - - // Then update our task's qos - if (this->dispatching_task_ != 0) - { - this->dispatching_task_->update_qos (this->qos_admin_); - } - if (this->filter_eval_task_ != 0) - { - this->filter_eval_task_->update_qos (this->qos_admin_); - } -} - - -#endif /* TAO_NOTIFY_PROXYSUPPLIER_T_C */ |