00001
00002
00003 #ifndef TAO_Notify_PROXYCONSUMER_T_CPP
00004 #define TAO_Notify_PROXYCONSUMER_T_CPP
00005
00006 #include "orbsvcs/Notify/ProxyConsumer_T.h"
00007 #include "orbsvcs/Notify/SupplierAdmin.h"
00008
00009 #include "orbsvcs/Notify/Event_Manager.h"
00010
00011 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00012
00013 template <class SERVANT_TYPE>
00014 TAO_Notify_ProxyConsumer_T<SERVANT_TYPE>::TAO_Notify_ProxyConsumer_T (void)
00015 {
00016 }
00017
00018 template <class SERVANT_TYPE>
00019 TAO_Notify_ProxyConsumer_T<SERVANT_TYPE>::~TAO_Notify_ProxyConsumer_T ()
00020 {
00021 }
00022
00023 template <class SERVANT_TYPE> void
00024 TAO_Notify_ProxyConsumer_T<SERVANT_TYPE>::admin_types_changed (const CosNotification::EventTypeSeq & added,
00025 const CosNotification::EventTypeSeq & removed
00026 ACE_ENV_ARG_DECL)
00027 {
00028 this->offer_change (added, removed ACE_ENV_ARG_PARAMETER);
00029 }
00030
00031 template <class SERVANT_TYPE> CosNotifyChannelAdmin::SupplierAdmin_ptr
00032 TAO_Notify_ProxyConsumer_T<SERVANT_TYPE>::MyAdmin (ACE_ENV_SINGLE_ARG_DECL)
00033 ACE_THROW_SPEC ((
00034 CORBA::SystemException
00035 ))
00036 {
00037 CosNotifyChannelAdmin::SupplierAdmin_var ret;
00038
00039 CORBA::Object_var object = this->supplier_admin().ref (ACE_ENV_SINGLE_ARG_PARAMETER);
00040 ACE_CHECK_RETURN (ret._retn ());
00041
00042 ret = CosNotifyChannelAdmin::SupplierAdmin::_narrow (object.in () ACE_ENV_ARG_PARAMETER);
00043
00044 return ret._retn ();
00045 }
00046
00047 template <class SERVANT_TYPE> void
00048 TAO_Notify_ProxyConsumer_T<SERVANT_TYPE>::offer_change (const CosNotification::EventTypeSeq & added, const CosNotification::EventTypeSeq & removed ACE_ENV_ARG_DECL)
00049 ACE_THROW_SPEC ((
00050 CORBA::SystemException,
00051 CosNotifyComm::InvalidEventType
00052 ))
00053 {
00054 TAO_Notify_EventTypeSeq seq_added (added);
00055 TAO_Notify_EventTypeSeq seq_removed (removed);
00056
00057 {
00058 ACE_GUARD_THROW_EX (TAO_SYNCH_MUTEX, ace_mon, this->lock_,
00059 CORBA::INTERNAL ());
00060 ACE_CHECK;
00061
00062 this->subscribed_types_.add_and_remove (seq_added, seq_removed);
00063 }
00064
00065 this->event_manager().offer_change (this,
00066 seq_added,
00067 seq_removed
00068 ACE_ENV_ARG_PARAMETER);
00069 }
00070
00071 template <class SERVANT_TYPE> CosNotification::EventTypeSeq*
00072 TAO_Notify_ProxyConsumer_T<SERVANT_TYPE>::obtain_subscription_types (
00073 CosNotifyChannelAdmin::ObtainInfoMode mode
00074 ACE_ENV_ARG_DECL)
00075 ACE_THROW_SPEC ((CORBA::SystemException))
00076 {
00077 return
00078 this->obtain_types (mode, this->event_manager().subscription_types ()
00079 ACE_ENV_ARG_PARAMETER);
00080 }
00081
00082 TAO_END_VERSIONED_NAMESPACE_DECL
00083
00084 #endif