diff options
author | William R. Otte <wotte@dre.vanderbilt.edu> | 2006-07-24 15:50:11 +0000 |
---|---|---|
committer | William R. Otte <wotte@dre.vanderbilt.edu> | 2006-07-24 15:50:11 +0000 |
commit | 6b846cf03c0bcbd8c276cb0af61a181e5f98eaae (patch) | |
tree | da50d054f9c761c3f6a5923f6979e93306c56d68 /TAO/orbsvcs/Fault_Notifier/FT_Notifier_i.cpp | |
parent | 0e555b9150d38e3b3473ba325b56db2642e6352b (diff) | |
download | ATCD-6b846cf03c0bcbd8c276cb0af61a181e5f98eaae.tar.gz |
Repo restructuring
Diffstat (limited to 'TAO/orbsvcs/Fault_Notifier/FT_Notifier_i.cpp')
-rw-r--r-- | TAO/orbsvcs/Fault_Notifier/FT_Notifier_i.cpp | 774 |
1 files changed, 0 insertions, 774 deletions
diff --git a/TAO/orbsvcs/Fault_Notifier/FT_Notifier_i.cpp b/TAO/orbsvcs/Fault_Notifier/FT_Notifier_i.cpp deleted file mode 100644 index e120b9a2cc7..00000000000 --- a/TAO/orbsvcs/Fault_Notifier/FT_Notifier_i.cpp +++ /dev/null @@ -1,774 +0,0 @@ -// -*- C++ -*- -//============================================================================= -/** - * @file FT_Notifier_i.cpp - * - * $Id$ - * - * This file is part of Fault Tolerant CORBA. - * - * @author Dale Wilson <wilson_d@ociweb.com> - */ -//============================================================================= - -#include "FT_Notifier_i.h" - -#include "ace/Get_Opt.h" -#include "ace/OS_NS_stdio.h" -#include "ace/OS_NS_unistd.h" -#include "tao/debug.h" - -// Use this macro at the beginning of CORBA methods -// to aid in debugging. -#define METHOD_ENTRY(name) \ - if (TAO_debug_level > 6) \ - { \ - ACE_DEBUG (( LM_DEBUG, \ - "Enter %s\n", #name \ - )); \ - } - -// Use this macro to return from CORBA methods -// to aid in debugging. Note that you can specify -// the return value after the macro, for example: -// METHOD_RETURN(Plugh::plover) xyzzy; is equivalent -// to return xyzzy; -// METHOD_RETURN(Plugh::troll); is equivalent to -// return; -// WARNING: THIS GENERATES TWO STATEMENTS!!! THE FOLLOWING -// will not do what you want it to: -// if (cave_is_closing) METHOD_RETURN(Plugh::pirate) aarrggh; -// Moral: Always use braces. -#define METHOD_RETURN(name) \ - if (TAO_debug_level > 6) \ - { \ - ACE_DEBUG (( LM_DEBUG, \ - "Leave %s\n", #name \ - )); \ - } \ - return /* value goes here */ - - -TAO_BEGIN_VERSIONED_NAMESPACE_DECL - -// Implementation skeleton constructor -TAO::FT_FaultNotifier_i::FT_FaultNotifier_i () - : orb_ (0) - , poa_ (0) - , object_id_ (0) - , ior_output_file_(0) - , ns_name_(0) - , naming_context_ (0) - , this_name_ (1) - , rm_register_ (1) - , replication_manager_ (0) - , registered_ (0) - , identity_ ("") - , proxy_infos_ (0) - , consumer_connects_(0) - , consumer_disconnects_(0) - , notify_channel_ (0) - , filter_factory_ (0) - , supplier_admin_ (0) - , consumer_admin_ (0) - , structured_proxy_push_consumer_ (0) - , sequence_proxy_push_consumer_ (0) - , quit_on_idle_(0) - , quitting_(0) - , gone_(0) -{ -} - -// Implementation skeleton destructor -TAO::FT_FaultNotifier_i::~FT_FaultNotifier_i () -{ - ACE_TRY_NEW_ENV - { - fini (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_TRY_CHECK; - } - ACE_CATCHALL - { - } - ACE_ENDTRY; -} - - -int TAO::FT_FaultNotifier_i::idle(int &result ACE_ENV_ARG_DECL_NOT_USED) -{ - static unsigned long linger = 0; - ACE_UNUSED_ARG(result); - if (gone_) - { - if ( linger == 0) - { - ACE_ERROR ((LM_ERROR, - "FaultNotifier (%P|%t) Begin linger.\n" - )); - } - if(++linger > 5)//10) - { - ACE_ERROR ((LM_ERROR, - "FaultNotifier (%P|%t) idle returnning gone\n" - )); - } - else - { - return 0; - } - } - return this->gone_; -} - -//////////////////////////////////////////// -// FT_FaultNotifier_i private methods - - -// TODO: find this a common home -int TAO::FT_FaultNotifier_i::write_ior() -{ - int result = -1; - FILE* out = ACE_OS::fopen (this->ior_output_file_, "w"); - if (out) - { - ACE_OS::fprintf (out, "%s", this->ior_.in ()); - ACE_OS::fclose (out); - result = 0; - } - else - { - ACE_ERROR ((LM_ERROR, - "%T %n (%P|%t) Open failed for %s\n", ior_output_file_ - )); - } - return result; -} - -////////////////////////////////////////////////////// -// FT_FaultNotifier_i public, non-CORBA methods - -int TAO::FT_FaultNotifier_i::parse_args (int argc, char * argv[]) -{ - ACE_Get_Opt get_opts (argc, argv, "o:rq"); - int c; - - while ((c = get_opts ()) != -1) - { - switch (c) - { - case 'o': - { - this->ior_output_file_ = get_opts.opt_arg (); - break; - } - case 'r': - { - this->rm_register_ = ! this->rm_register_; - break; - } - case 'q': - { - this->quit_on_idle_ = 1; - break; - } - case '?': - // fall thru - default: - { - ACE_ERROR_RETURN ((LM_ERROR, - "usage: %s" - " -o <iorfile>" - " -r disable registration with ReplicationManager" - " -q(uit on idle)" - "\n", - argv [0]), - -1); - break; - } - } - } - // Indicates sucessful parsing of the command line - return 0; -} - -const char * TAO::FT_FaultNotifier_i::identity () const -{ - return this->identity_.c_str(); -} - -PortableServer::POA_ptr TAO::FT_FaultNotifier_i::_default_POA (ACE_ENV_SINGLE_ARG_DECL_NOT_USED) -{ - return this->poa_.in(); -} - - -void TAO::FT_FaultNotifier_i::_remove_ref (ACE_ENV_SINGLE_ARG_DECL) -{ - notify_channel_->destroy(ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK; - - ACE_ERROR ((LM_ERROR, - "FaultNotifier (%P|%t) _remove_ref setting gone\n" - )); - this->gone_ = 1; -} - -int TAO::FT_FaultNotifier_i::fini (ACE_ENV_SINGLE_ARG_DECL) -{ - if (this->ior_output_file_ != 0) - { - ACE_OS::unlink (this->ior_output_file_); - this->ior_output_file_ = 0; - } - if (this->ns_name_ != 0 && this->naming_context_.in() != 0) - { - this->naming_context_->unbind (this_name_ - ACE_ENV_ARG_PARAMETER); - this->ns_name_ = 0; - } - - if (this->registered_) - { - ACE_TRY - { - this->replication_manager_->register_fault_notifier(::FT::FaultNotifier::_nil ()); - ACE_TRY_CHECK; - ACE_DEBUG ((LM_DEBUG, - "FaultNotifier unregistered from ReplicationManager.\n" - )); - } - ACE_CATCHANY - { - ACE_DEBUG ((LM_DEBUG, - "FaultNotifier Can't unregister from ReplicationManager.\n" - )); - // complain, but otherwise ignore this error - // RM may be down. - } - ACE_ENDTRY; - - this->registered_ = 0; - } - return 0; -} - -int TAO::FT_FaultNotifier_i::init (CORBA::ORB_ptr orb ACE_ENV_ARG_DECL ) -{ - int result = 0; - this->orb_ = CORBA::ORB::_duplicate (orb); - - // Use the ROOT POA for now - CORBA::Object_var poa_object = - this->orb_->resolve_initial_references (TAO_OBJID_ROOTPOA - ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (-1); - - if (CORBA::is_nil (poa_object.in ())) - ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT (" (%P|%t) Unable to initialize the POA.\n")), - -1); - - // Get the POA object. - this->poa_ = - PortableServer::POA::_narrow (poa_object.in () - ACE_ENV_ARG_PARAMETER); - - ACE_CHECK_RETURN (-1); - - if (CORBA::is_nil(this->poa_.in ())) - { - ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT (" (%P|%t) Unable to narrow the POA.\n")), - -1); - } - - PortableServer::POAManager_var poa_manager = - this->poa_->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN(-1); - - poa_manager->activate (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN(-1); - - // Register with the POA. - - this->object_id_ = this->poa_->activate_object (this ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN(-1); - - // find my IOR - - CORBA::Object_var this_obj = - this->poa_->id_to_reference (object_id_.in () - ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN(-1); - - this->ior_ = this->orb_->object_to_string (this_obj.in () - ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN(-1); - - - //////////////////////////////////////////////// - // Register with coresident Notification Channel - CosNotifyChannelAdmin::EventChannelFactory_var notify_factory = - TAO_Notify_EventChannelFactory_i::create (poa_.in () - ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN(-1); - CosNotification::QoSProperties initial_qos; - CosNotification::AdminProperties initial_admin; - this->notify_channel_ = - notify_factory->create_channel (initial_qos, - initial_admin, - channel_id_ - ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN(-1); - - this->filter_factory_ = this->notify_channel_->default_filter_factory (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN(-1); - - /////////////////////////// - // Producer registration - - this->supplier_admin_ = this->notify_channel_->default_supplier_admin (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN(-1); - - ::CosNotifyChannelAdmin::ProxyID proxyId = 0; - - ////////////////////// - // structured producer - ::CosNotifyChannelAdmin::ProxyConsumer_var consumer - = this->supplier_admin_->obtain_notification_push_consumer ( - ::CosNotifyChannelAdmin::STRUCTURED_EVENT, - proxyId - ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN(-1); - - structured_proxy_push_consumer_ - = ::CosNotifyChannelAdmin::StructuredProxyPushConsumer::_narrow(consumer.in () - ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN(-1); - if (CORBA::is_nil (this->structured_proxy_push_consumer_.in ())) - { - ACE_ERROR_RETURN ((LM_ERROR, - "%T %n (%P|%t) Should not occur: Unable to narrow Structured Proxy Push Consumer\n"), - 1); - } - - // todo: implement a push supplier if we want to receive disconnect notice - CosNotifyComm::StructuredPushSupplier_var stubPushSupplier = - CosNotifyComm::StructuredPushSupplier::_nil(); - - this->structured_proxy_push_consumer_->connect_structured_push_supplier (stubPushSupplier.in() - ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN(-1); - - //////////////////// - // Sequence producer - consumer - = this->supplier_admin_->obtain_notification_push_consumer ( - ::CosNotifyChannelAdmin::SEQUENCE_EVENT, - proxyId - ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (-1); - - this->sequence_proxy_push_consumer_ - = ::CosNotifyChannelAdmin::SequenceProxyPushConsumer::_narrow(consumer.in () - ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (-1); - if (CORBA::is_nil (this->sequence_proxy_push_consumer_.in ())) - { - ACE_ERROR_RETURN ((LM_ERROR, - "%T %n (%P|%t) Should not occur: Unable to narrow Sequence Proxy Push Consumer\n"), - 1); - } - - // todo: implement this if we want to receive disconnect notice - CosNotifyComm::SequencePushSupplier_var stubSeqPushSupplier = - CosNotifyComm::SequencePushSupplier::_nil(); - - this->sequence_proxy_push_consumer_->connect_sequence_push_supplier (stubSeqPushSupplier.in() - ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN(-1); - /////////////////////////// - // Consumer registration - - // find the channel administrator for consumers - this->consumer_admin_ = this->notify_channel_->default_consumer_admin (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK_RETURN(-1); - if (CORBA::is_nil (this->consumer_admin_.in ())) - { - ACE_ERROR ((LM_ERROR, - "%T %n (%P|%t) NIL consumer admin\n" - )); - result = -1; - } - // everything else happens when subscriber shows up - - /////////////////////////////// - // Register with ReplicationManager - if (this->rm_register_) - { - ACE_TRY_NEW_ENV - { - CORBA::Object_var rm_obj = orb->resolve_initial_references("ReplicationManager" ACE_ENV_ARG_PARAMETER); - ACE_TRY_CHECK; - this->replication_manager_ = ::FT::ReplicationManager::_narrow(rm_obj.in() ACE_ENV_ARG_PARAMETER); - ACE_TRY_CHECK; - if (!CORBA::is_nil (replication_manager_.in ())) - { - // @@: should we check to see if there's already one registered? - FT::FaultNotifier_var notifier = FT::FaultNotifier::_narrow (this_obj.in ()); - if (! CORBA::is_nil (notifier.in ())) - { - this->replication_manager_->register_fault_notifier(notifier.in ()); - ACE_DEBUG ((LM_DEBUG, - "FaultNotifier registered with ReplicationManager.\n" - )); - this->registered_ = 1; - } - else - { - ACE_ERROR ((LM_ERROR, - "Error: Registration failed. This is not a FaultNotifier (should not occur.)\n" - )); - } - } - else - { - ACE_ERROR ((LM_ERROR,"FaultNotifier: Can't resolve ReplicationManager, It will not be registered.\n" )); - } - } - ACE_CATCHANY - { - ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, - "FaultNotifier: Exception resolving ReplicationManager. Notifier will not be registered.\n" ); - } - ACE_ENDTRY; - } - else - { - ACE_DEBUG ((LM_DEBUG, - "FaultNotifier: ReplicationManager registration disabled.\n" - )); - } - /////////////////////////////// - // Set up and ready for action - // publish our IOR - - if(result == 0) - { - if (this->ior_output_file_ != 0) - { - this->identity_ = "file:"; - this->identity_ += this->ior_output_file_; - result = write_ior(); - } - } - - if (result == 0) - { - if (this->ns_name_ != 0) - { - this->identity_ = "name:"; - this->identity_ += this->ns_name_; - - CORBA::Object_var naming_obj = - this->orb_->resolve_initial_references ("NameService" ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (-1); - - if (CORBA::is_nil(naming_obj.in ())){ - ACE_ERROR_RETURN ((LM_ERROR, - "%T %n (%P|%t) Unable to find the Naming Service\n"), - 1); - } - - this->naming_context_ = - CosNaming::NamingContext::_narrow (naming_obj.in () ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (-1); - if (CORBA::is_nil(this->naming_context_.in ())) - { - ACE_ERROR_RETURN ((LM_ERROR, - "%T %n (%P|%t) Should not occur: Can't narrow initial reference to naming context.\n"), - 1); - } - this->this_name_.length (1); - this->this_name_[0].id = CORBA::string_dup (this->ns_name_); - - this->naming_context_->rebind (this->this_name_, this_obj.in() //CORBA::Object::_duplicate(this_obj) - ACE_ENV_ARG_PARAMETER); - ACE_CHECK_RETURN (-1); - } - } - - return result; -} - -/////////////////// -// CORBA METHODS - -void TAO::FT_FaultNotifier_i::push_structured_fault ( - const CosNotification::StructuredEvent & event - ACE_ENV_ARG_DECL - ) - ACE_THROW_SPEC ((CORBA::SystemException)) -{ - METHOD_ENTRY(TAO::FT_FaultNotifier_i::push_structured_fault); - - this->structured_proxy_push_consumer_->push_structured_event (event - ACE_ENV_ARG_PARAMETER); - - METHOD_RETURN(TAO::FT_FaultNotifier_i::push_structured_fault); -} - -void TAO::FT_FaultNotifier_i::push_sequence_fault ( - const CosNotification::EventBatch & events - ACE_ENV_ARG_DECL - ) - ACE_THROW_SPEC ((CORBA::SystemException)) -{ - METHOD_ENTRY(TAO::FT_FaultNotifier_i::push_sequence_fault); - - this->sequence_proxy_push_consumer_->push_structured_events (events - ACE_ENV_ARG_PARAMETER); - - METHOD_RETURN(TAO::FT_FaultNotifier_i::push_sequence_fault); -} - -::CosNotifyFilter::Filter_ptr TAO::FT_FaultNotifier_i::create_subscription_filter ( - const char * constraint_grammar - ACE_ENV_ARG_DECL_NOT_USED - ) - ACE_THROW_SPEC ((CORBA::SystemException, CosNotifyFilter::InvalidGrammar)) -{ - METHOD_ENTRY(TAO::FT_FaultNotifier_i::create_subscription_filter); - ACE_UNUSED_ARG (constraint_grammar); //@@todo - - CosNotifyFilter::Filter_var filter = this->filter_factory_->create_filter ("ETCL"); - METHOD_RETURN(TAO::FT_FaultNotifier_i::create_subscription_filter) - filter._retn (); -} - -FT::FaultNotifier::ConsumerId TAO::FT_FaultNotifier_i::connect_structured_fault_consumer ( - CosNotifyComm::StructuredPushConsumer_ptr push_consumer, - CosNotifyFilter::Filter_ptr filter - ACE_ENV_ARG_DECL - ) - ACE_THROW_SPEC ((CORBA::SystemException)) -{ - METHOD_ENTRY(TAO::FT_FaultNotifier_i::connect_structured_fault_consumer); - - ///////////////////////// - // find a ProxyInfo entry - // use the first nil entry or a new entry if no nils found - - size_t infoPos = 0; - int looking = 1; - for ( size_t pos = 0; looking && pos < this->proxy_infos_.size (); ++pos) - { - ProxyInfo & pi = this->proxy_infos_[pos]; - if (CORBA::is_nil(pi.proxyVar_.in ())) - { - infoPos = pos; - looking = 0; - } - } - if (looking) - { - infoPos = this->proxy_infos_.size(); - this->proxy_infos_.push_back(ProxyInfo()); - } - - /////////////////////////////////////// - // Assign an ID, populate the ProxyInfo - FT::FaultNotifier::ConsumerId result = infoPos; - ProxyInfo & info = this->proxy_infos_[infoPos]; - info.proxyVar_ - = this->consumer_admin_->obtain_notification_push_supplier ( - ::CosNotifyChannelAdmin::STRUCTURED_EVENT, - info.proxyId_ - ACE_ENV_ARG_PARAMETER); - - this->consumer_connects_ += 1; - - ::CosNotifyChannelAdmin::StructuredProxyPushSupplier_var proxySupplier - = ::CosNotifyChannelAdmin::StructuredProxyPushSupplier::_narrow(info.proxyVar_.in () - ACE_ENV_ARG_PARAMETER); - - if ( CORBA::is_nil (proxySupplier.in ())) - { - // this is a shoould-not-occur situation. The consumer admin returned - // the wrong kind of object. - ACE_ERROR(( LM_ERROR, - "%T %n (%P|%t) Unexpected result: Wrong type of object returned from obtain_notification_push_supplier\n" - )); - } - else - { - proxySupplier->connect_structured_push_consumer ( push_consumer - ACE_ENV_ARG_PARAMETER); - - if (! CORBA::is_nil (filter)) - { - proxySupplier->add_filter(filter); - } - } - - METHOD_RETURN(TAO::FT_FaultNotifier_i::connect_structured_fault_consumer) result; -} - -FT::FaultNotifier::ConsumerId TAO::FT_FaultNotifier_i::connect_sequence_fault_consumer ( - CosNotifyComm::SequencePushConsumer_ptr push_consumer, - CosNotifyFilter::Filter_ptr filter - ACE_ENV_ARG_DECL - ) - ACE_THROW_SPEC ((CORBA::SystemException)) -{ - METHOD_ENTRY(TAO::FT_FaultNotifier_i::connect_sequence_fault_consumer); - ///////////////////////// - // find a ProxyInfo entry - // use the first nil entry or a new entry if no nils found - - size_t infoPos = 0; - int looking = 1; - for ( size_t pos = 0; looking && pos < this->proxy_infos_.size (); ++pos) - { - ProxyInfo & pi = this->proxy_infos_[pos]; - if (CORBA::is_nil(pi.proxyVar_.in ())) - { - infoPos = pos; - looking = 0; - } - } - if (looking) - { - infoPos = this->proxy_infos_.size(); - this->proxy_infos_.push_back(ProxyInfo()); - } - - /////////////////////////////////////// - // Assign an ID, populate the ProxyInfo - FT::FaultNotifier::ConsumerId result = infoPos; - ProxyInfo & info = this->proxy_infos_[infoPos]; - info.proxyVar_ - = this->consumer_admin_->obtain_notification_push_supplier ( - ::CosNotifyChannelAdmin::SEQUENCE_EVENT, - info.proxyId_ - ACE_ENV_ARG_PARAMETER); - - this->consumer_connects_ += 1; - - ::CosNotifyChannelAdmin::SequenceProxyPushSupplier_var proxySupplier - = ::CosNotifyChannelAdmin::SequenceProxyPushSupplier::_narrow(info.proxyVar_.in () - ACE_ENV_ARG_PARAMETER); - if ( CORBA::is_nil (proxySupplier.in ())) - { - // this is a shoould-not-occur situation. The consumer admin returned - // the wrong kind of object. - ACE_ERROR(( LM_ERROR, - "%T %n (%P|%t) Unexpected result: Wrong type of object returned from obtain_notification_push_supplier\n" - )); - } - else - { - proxySupplier->connect_sequence_push_consumer ( push_consumer - ACE_ENV_ARG_PARAMETER); - - if (! CORBA::is_nil (filter)) - { - proxySupplier->add_filter(filter); - } - } - METHOD_RETURN(TAO::FT_FaultNotifier_i::connect_sequence_fault_consumer) result; -} - -void TAO::FT_FaultNotifier_i::disconnect_consumer ( - FT::FaultNotifier::ConsumerId connection - ACE_ENV_ARG_DECL - ) - ACE_THROW_SPEC ((CORBA::SystemException, CosEventComm::Disconnected)) -{ - METHOD_ENTRY(TAO::FT_FaultNotifier_i::disconnect_consumer); - - size_t index = static_cast<size_t> (connection); - if (index < this->proxy_infos_.size()) - { - ProxyInfo & info = this->proxy_infos_[index]; - if (CORBA::is_nil(info.proxyVar_.in ()) ) - { - ACE_THROW(CosEventComm::Disconnected()); - } - else - { - ::CosNotifyChannelAdmin::StructuredProxyPushSupplier_var proxySupplier - = ::CosNotifyChannelAdmin::StructuredProxyPushSupplier::_narrow(info.proxyVar_.in () - ACE_ENV_ARG_PARAMETER); - if (! CORBA::is_nil (proxySupplier.in ())) - { - proxySupplier->disconnect_structured_push_supplier (); - info.proxyVar_ = ::CosNotifyChannelAdmin::ProxySupplier::_nil(); - } - else - { - ::CosNotifyChannelAdmin::SequenceProxyPushSupplier_var proxySupplier - = ::CosNotifyChannelAdmin::SequenceProxyPushSupplier::_narrow(info.proxyVar_.in () - ACE_ENV_ARG_PARAMETER); - if (! CORBA::is_nil (proxySupplier.in ())) - { - proxySupplier->disconnect_sequence_push_supplier (); - info.proxyVar_ = ::CosNotifyChannelAdmin::ProxySupplier::_nil(); - } - else - { - ACE_ERROR((LM_ERROR, - "%T %n (%P|%t) Unexpected proxy supplier type\n" - )); - ACE_THROW(CosEventComm::Disconnected()); - } - } - } - } - else - { - ACE_THROW(CosEventComm::Disconnected()); - } - - this->consumer_disconnects_ += 1; - if (this->quit_on_idle_) - { - if (! this->quitting_ - && this->consumer_connects_ == this->consumer_disconnects_) - { - ACE_ERROR((LM_ERROR, - "FaultNotifier (%P|%t) quit on idle: connects %d, disconnects %d\n", - static_cast<unsigned int> (this->consumer_connects_), - static_cast<unsigned int> (this->consumer_disconnects_) - )); - this->poa_->deactivate_object (this->object_id_.in () - ACE_ENV_ARG_PARAMETER); - this->quitting_ = 1; - } - } - - METHOD_RETURN(TAO::FT_FaultNotifier_i::disconnect_consumer); -} - -CORBA::Boolean TAO::FT_FaultNotifier_i::is_alive (ACE_ENV_SINGLE_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((CORBA::SystemException)) -{ - METHOD_RETURN(TAO::FT_FaultNotifier_i::is_alive) 1; -} - -////////////// -// ProxyInfo - -TAO::FT_FaultNotifier_i::ProxyInfo::ProxyInfo () - : proxyId_ (0) - , proxyVar_ (::CosNotifyChannelAdmin::ProxySupplier::_nil()) -{ -} - -TAO::FT_FaultNotifier_i::ProxyInfo::ProxyInfo (const ProxyInfo & rhs) - : proxyId_ (rhs.proxyId_) - , proxyVar_ (rhs.proxyVar_) -{ -} - -TAO_END_VERSIONED_NAMESPACE_DECL |