00001 // SequenceProxyPushSupplier.cpp,v 1.15 2006/03/15 21:29:09 jtc Exp 00002 00003 #include "orbsvcs/Notify/Sequence/SequenceProxyPushSupplier.h" 00004 00005 ACE_RCSID (Notify, TAO_Notify_SequenceProxyPushSupplier, "SequenceProxyPushSupplier.cpp,v 1.15 2006/03/15 21:29:09 jtc Exp") 00006 00007 #include "tao/debug.h" 00008 #include "orbsvcs/Notify/Sequence/SequencePushConsumer.h" 00009 #include "orbsvcs/Notify/Properties.h" 00010 00011 TAO_BEGIN_VERSIONED_NAMESPACE_DECL 00012 00013 TAO_Notify_SequenceProxyPushSupplier::TAO_Notify_SequenceProxyPushSupplier (void) 00014 { 00015 } 00016 00017 TAO_Notify_SequenceProxyPushSupplier::~TAO_Notify_SequenceProxyPushSupplier () 00018 { 00019 } 00020 00021 void 00022 TAO_Notify_SequenceProxyPushSupplier::release (void) 00023 { 00024 delete this; 00025 //@@ inform factory 00026 } 00027 00028 void 00029 TAO_Notify_SequenceProxyPushSupplier::connect_sequence_push_consumer (CosNotifyComm::SequencePushConsumer_ptr push_consumer ACE_ENV_ARG_DECL) 00030 ACE_THROW_SPEC (( 00031 CORBA::SystemException 00032 , CosEventChannelAdmin::AlreadyConnected 00033 , CosEventChannelAdmin::TypeError 00034 )) 00035 { 00036 // Convert Consumer to Base Type 00037 TAO_Notify_SequencePushConsumer* consumer; 00038 ACE_NEW_THROW_EX (consumer, 00039 TAO_Notify_SequencePushConsumer (this), 00040 CORBA::NO_MEMORY ()); 00041 00042 consumer->init (push_consumer ACE_ENV_ARG_PARAMETER); 00043 ACE_CHECK; 00044 00045 this->connect (consumer ACE_ENV_ARG_PARAMETER); 00046 ACE_CHECK; 00047 this->self_change (ACE_ENV_SINGLE_ARG_PARAMETER); 00048 } 00049 00050 void 00051 TAO_Notify_SequenceProxyPushSupplier::disconnect_sequence_push_supplier (ACE_ENV_SINGLE_ARG_DECL) 00052 ACE_THROW_SPEC (( 00053 CORBA::SystemException 00054 )) 00055 00056 { 00057 TAO_Notify_SequenceProxyPushSupplier::Ptr guard( this ); 00058 this->destroy (ACE_ENV_SINGLE_ARG_PARAMETER); 00059 ACE_CHECK; 00060 this->self_change (ACE_ENV_SINGLE_ARG_PARAMETER); 00061 } 00062 00063 CosNotifyChannelAdmin::ProxyType 00064 TAO_Notify_SequenceProxyPushSupplier::MyType (ACE_ENV_SINGLE_ARG_DECL_NOT_USED) 00065 ACE_THROW_SPEC (( 00066 CORBA::SystemException 00067 )) 00068 { 00069 return CosNotifyChannelAdmin::PUSH_SEQUENCE; 00070 } 00071 00072 const char * 00073 TAO_Notify_SequenceProxyPushSupplier::get_proxy_type_name (void) const 00074 { 00075 return "sequence_proxy_push_supplier"; 00076 } 00077 00078 void 00079 TAO_Notify_SequenceProxyPushSupplier::load_attrs (const TAO_Notify::NVPList& attrs) 00080 { 00081 SuperClass::load_attrs(attrs); 00082 ACE_CString ior; 00083 if (attrs.load("PeerIOR", ior)) 00084 { 00085 CORBA::ORB_var orb = TAO_Notify_PROPERTIES::instance()->orb(); 00086 ACE_DECLARE_NEW_CORBA_ENV; 00087 ACE_TRY 00088 { 00089 CosNotifyComm::SequencePushConsumer_var pc = CosNotifyComm::SequencePushConsumer::_nil(); 00090 if (ior.length() > 0) 00091 { 00092 CORBA::Object_var obj = orb->string_to_object(ior.c_str() ACE_ENV_ARG_PARAMETER); 00093 ACE_TRY_CHECK; 00094 pc = CosNotifyComm::SequencePushConsumer::_unchecked_narrow(obj.in() ACE_ENV_ARG_PARAMETER); 00095 ACE_TRY_CHECK; 00096 } 00097 this->connect_sequence_push_consumer(pc.in() ACE_ENV_ARG_PARAMETER); 00098 ACE_TRY_CHECK; 00099 } 00100 ACE_CATCHANY 00101 { 00102 // if we can't reconnect, tough 00103 } 00104 ACE_ENDTRY; 00105 } 00106 } 00107 00108 TAO_END_VERSIONED_NAMESPACE_DECL