Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef TAO_Notify_EVENTCHANNELFACTORY_H
00013 #define TAO_Notify_EVENTCHANNELFACTORY_H
00014
00015 #include "ace/pre.h"
00016
00017 #include "orbsvcs/Notify/notify_serv_export.h"
00018
00019 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00020 # pragma once
00021 #endif
00022
00023 #include "orbsvcs/Notify/Topology_Object.h"
00024 #include "orbsvcs/Notify/Topology_Factory.h"
00025 #include "orbsvcs/Notify/Reconnection_Registry.h"
00026 #include "orbsvcs/Notify/Routing_Slip.h"
00027 #include "orbsvcs/Notify/Validate_Client_Task.h"
00028 #include "orbsvcs/Notify/Name_Value_Pair.h"
00029
00030 #include "orbsvcs/CosNotifyChannelAdminS.h"
00031 #include "orbsvcs/NotifyExtS.h"
00032 #include "ace/Auto_Ptr.h"
00033
00034 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00035
00036 class TAO_Notify_FilterFactory;
00037
00038 #if defined(_MSC_VER)
00039 #pragma warning(push)
00040 #pragma warning(disable:4250)
00041 #endif
00042
00043 class TAO_Notify_EventChannel;
00044 template <class TYPE> class TAO_Notify_Container_T;
00045
00046
00047
00048
00049
00050
00051
00052 class TAO_Notify_Serv_Export TAO_Notify_EventChannelFactory
00053 : public virtual POA_NotifyExt::EventChannelFactory
00054 , public TAO_Notify::Topology_Parent
00055 {
00056 friend class TAO_Notify_Builder;
00057 typedef ACE_Unbounded_Set <TAO_Notify::Routing_Slip_Ptr> Routing_Slip_Set;
00058
00059 public:
00060 typedef TAO_Notify_Refcountable_Guard_T< TAO_Notify_EventChannelFactory > Ptr;
00061
00062
00063 TAO_Notify_EventChannelFactory (void);
00064
00065
00066 void init (PortableServer::POA_ptr poa);
00067
00068
00069 virtual ~TAO_Notify_EventChannelFactory ();
00070
00071
00072 virtual void _add_ref (void);
00073 virtual void _remove_ref (void);
00074
00075
00076 virtual void remove (TAO_Notify_EventChannel* channel);
00077
00078
00079
00080 virtual CosNotifyChannelAdmin::EventChannel_ptr create_named_channel (
00081 const CosNotification::QoSProperties& initial_qos,
00082 const CosNotification::AdminProperties& initial_admin,
00083 CosNotifyChannelAdmin::ChannelID_out id,
00084 const char* name);
00085
00086
00087
00088
00089
00090
00091
00092
00093 void load_topology (void);
00094
00095
00096
00097 void set_topology_factory(TAO_Notify::Topology_Factory* sf);
00098
00099
00100
00101 virtual bool is_persistent (void) const;
00102
00103 virtual void save_persistent (TAO_Notify::Topology_Saver& saver);
00104 virtual bool change_to_parent (void);
00105 virtual TAO_Notify::Topology_Object* load_child (const ACE_CString &type,
00106 CORBA::Long id,
00107 const TAO_Notify::NVPList& attrs);
00108 CosNotifyChannelAdmin::EventChannelFactory_ptr activate_self (void);
00109 virtual void reconnect (void);
00110 virtual void validate ();
00111
00112
00113 void stop_validator (void);
00114
00115
00116 bool handle_change (void);
00117
00118 void load_event_persistence (void);
00119
00120 virtual void save_topology (void);
00121
00122 TAO_Notify_ProxyConsumer * find_proxy_consumer (TAO_Notify::IdVec & id_path, size_t position);
00123 TAO_Notify_ProxySupplier * find_proxy_supplier (TAO_Notify::IdVec & id_path, size_t position);
00124 TAO_Notify_Object * follow_id_path (TAO_Notify::IdVec & id_path, size_t position);
00125 virtual TAO_Notify_Object::ID get_id (void) const;
00126
00127 private:
00128
00129
00130
00131
00132 virtual void destroy (void);
00133
00134
00135 virtual int shutdown (void);
00136
00137 virtual
00138 NotifyExt::ReconnectionRegistry::ReconnectionID register_callback (
00139 NotifyExt::ReconnectionCallback_ptr reconnection);
00140
00141 virtual void unregister_callback (
00142 NotifyExt::ReconnectionRegistry::ReconnectionID id);
00143
00144 virtual CORBA::Boolean is_alive (void);
00145
00146 protected:
00147
00148 virtual ::CosNotifyChannelAdmin::EventChannel_ptr create_channel (
00149 const CosNotification::QoSProperties & initial_qos,
00150 const CosNotification::AdminProperties & initial_admin,
00151 CosNotifyChannelAdmin::ChannelID_out id);
00152
00153 virtual ::CosNotifyChannelAdmin::ChannelIDSeq * get_all_channels (void);
00154
00155 virtual ::CosNotifyChannelAdmin::EventChannel_ptr get_event_channel (
00156 CosNotifyChannelAdmin::ChannelID id);
00157
00158 private:
00159 typedef TAO_Notify_Container_T<TAO_Notify_EventChannel> TAO_Notify_EventChannel_Container;
00160
00161 TAO_Notify_EventChannel_Container& ec_container();
00162
00163
00164 ACE_Auto_Ptr< TAO_Notify_EventChannel_Container > ec_container_;
00165
00166 TAO_SYNCH_MUTEX topology_save_lock_;
00167
00168 CosNotifyChannelAdmin::EventChannelFactory_var channel_factory_;
00169
00170
00171 short topology_save_seq_;
00172 TAO_Notify::Topology_Factory* topology_factory_;
00173 TAO_Notify::Reconnection_Registry reconnect_registry_;
00174 bool loading_topology_;
00175
00176 Routing_Slip_Set routing_slip_restart_set_;
00177
00178
00179 virtual void release (void);
00180
00181 ACE_Auto_Ptr <TAO_Notify_validate_client_Task> validate_client_task_;
00182
00183 PortableServer::POA_var poa_;
00184 };
00185
00186 TAO_END_VERSIONED_NAMESPACE_DECL
00187
00188 #if defined(_MSC_VER)
00189 #pragma warning(pop)
00190 #endif
00191
00192 #include "ace/post.h"
00193
00194 #endif