TAO_Notify_Method_Request_Lookup Class Reference

#include <Method_Request_Lookup.h>

Inheritance diagram for TAO_Notify_Method_Request_Lookup:

Inheritance graph
[legend]
Collaboration diagram for TAO_Notify_Method_Request_Lookup:

Collaboration graph
[legend]
List of all members.

Public Types

enum  { persistence_code = 2 }
 an arbitrary code (Octet) to identify this type of request in persistent storage More...


Public Member Functions

virtual ~TAO_Notify_Method_Request_Lookup ()
 Destructor.


Static Public Member Functions

TAO_Notify_Method_Request_Lookup_Queueableunmarshal (TAO_Notify::Delivery_Request_Ptr &delivery_request, TAO_Notify_EventChannelFactory &ecf, TAO_InputCDR &cdr)
 Static method used to reconstruct a Method Request Dispatch.


Protected Member Functions

 TAO_Notify_Method_Request_Lookup (const TAO_Notify_Event *event, TAO_Notify_ProxyConsumer *proxy)
 Constuctor.

int execute_i ()
 Execute the dispatch operation.

virtual void work (TAO_Notify_ProxySupplier *proxy_supplier)
 = TAO_ESF_Worker method


Protected Attributes

TAO_Notify_ProxyConsumerproxy_consumer_
 The Proxy.


Member Enumeration Documentation

anonymous enum
 

an arbitrary code (Octet) to identify this type of request in persistent storage

Enumeration values:
persistence_code 

Definition at line 47 of file Method_Request_Lookup.h.

00047 {persistence_code = 2};


Constructor & Destructor Documentation

TAO_Notify_Method_Request_Lookup::~TAO_Notify_Method_Request_Lookup  )  [virtual]
 

Destructor.

Definition at line 34 of file Method_Request_Lookup.cpp.

00035 {
00036 }

TAO_BEGIN_VERSIONED_NAMESPACE_DECL TAO_Notify_Method_Request_Lookup::TAO_Notify_Method_Request_Lookup const TAO_Notify_Event event,
TAO_Notify_ProxyConsumer proxy
[protected]
 

Constuctor.

Definition at line 26 of file Method_Request_Lookup.cpp.

00029   : TAO_Notify_Method_Request_Event (event)
00030   , proxy_consumer_ (proxy)
00031 {
00032 }


Member Function Documentation

int TAO_Notify_Method_Request_Lookup::execute_i  )  [protected]
 

Execute the dispatch operation.

Definition at line 56 of file Method_Request_Lookup.cpp.

References ACE_CHECK_RETURN, ACE_DEBUG, ACE_ENV_ARG_PARAMETER, TAO_Notify_Proxy::check_filters(), TAO_Notify_Method_Request_Event::complete(), TAO_Notify_Event_Manager::consumer_map(), TAO_Notify_Object::event_manager(), TAO_Notify_Admin::filter_admin(), TAO_Notify_Admin::filter_operator(), TAO_ESF_Proxy_Collection< PROXY >::for_each(), TAO_Notify_Object::has_shutdown(), LM_DEBUG, proxy_consumer_, TAO_Notify_ProxyConsumer::supplier_admin(), TAO_debug_level, and TAO_Notify_ProxySupplier_Collection.

Referenced by TAO_Notify_Method_Request_Lookup_No_Copy::execute(), and TAO_Notify_Method_Request_Lookup_Queueable::execute().

00057 {
00058   if (this->proxy_consumer_->has_shutdown ())
00059     return 0; // If we were shutdown while waiting in the queue, return with no action.
00060 
00061   TAO_Notify_SupplierAdmin& parent = this->proxy_consumer_->supplier_admin ();
00062 
00063   CORBA::Boolean val =  this->proxy_consumer_->check_filters (this->event_,
00064                                                              parent.filter_admin (),
00065                                                              parent.filter_operator ()
00066                                                              ACE_ENV_ARG_PARAMETER);
00067   ACE_CHECK_RETURN (0);
00068 
00069   if (TAO_debug_level > 1)
00070     ACE_DEBUG ((LM_DEBUG, "Proxyconsumer %x filter eval result = %d",&this->proxy_consumer_ , val));
00071 
00072   // Filter failed - do nothing.
00073   if (val == 0)
00074     return 0;
00075 
00076   // The map of subscriptions.
00077   TAO_Notify_Consumer_Map& map = this->proxy_consumer_->event_manager ().consumer_map ();
00078 
00079   TAO_Notify_Consumer_Map::ENTRY* entry = map.find (this->event_->type () ACE_ENV_ARG_PARAMETER);
00080   ACE_CHECK_RETURN (0);
00081 
00082   TAO_Notify_ProxySupplier_Collection* consumers = 0;
00083 
00084   if (entry != 0)
00085   {
00086     consumers = entry->collection ();
00087 
00088     if (consumers != 0)
00089       {
00090         consumers->for_each (this ACE_ENV_ARG_PARAMETER);
00091         ACE_CHECK_RETURN (0);
00092       }
00093 
00094     map.release (entry);
00095   }
00096 
00097   // Get the default consumers
00098   consumers = map.broadcast_collection ();
00099 
00100   if (consumers != 0)
00101     {
00102       consumers->for_each (this ACE_ENV_ARG_PARAMETER);
00103       ACE_CHECK_RETURN (0);
00104     }
00105   this->complete ();
00106   return 0;
00107 }

TAO_Notify_Method_Request_Lookup_Queueable * TAO_Notify_Method_Request_Lookup::unmarshal TAO_Notify::Delivery_Request_Ptr delivery_request,
TAO_Notify_EventChannelFactory ecf,
TAO_InputCDR cdr
[static]
 

Static method used to reconstruct a Method Request Dispatch.

Definition at line 111 of file Method_Request_Lookup.cpp.

References ACE_CHECK_RETURN, ACE_ENV_ARG_PARAMETER, ACE_ERROR, ACE_NEW_NORETURN, ACE_TEXT(), TAO_Notify::Delivery_Request_Ptr, TAO_Notify_EventChannelFactory::find_proxy_consumer(), TAO_Notify_Object::ID, TAO_Notify::IdVec, LM_ERROR, and ACE_Vector< T, DEFAULT_SIZE >::push_back().

Referenced by TAO_Notify::Routing_Slip::unmarshal().

00116 {
00117   bool ok = true;
00118   TAO_Notify_Method_Request_Lookup_Queueable * result = 0;
00119   CORBA::ULong count;
00120   if (cdr.read_ulong (count))
00121   {
00122     TAO_Notify::IdVec id_path (count);
00123     for (size_t nid = 0; ok && nid < count; ++nid)
00124     {
00125       TAO_Notify_Object::ID id = 0;
00126       if ( cdr.read_long (id))
00127       {
00128         id_path.push_back (id);
00129       }
00130       else
00131       {
00132         ok = false;
00133       }
00134     }
00135 
00136     if (ok)
00137     {
00138       TAO_Notify_ProxyConsumer * proxy_consumer = ecf.find_proxy_consumer (
00139         id_path,
00140         0 ACE_ENV_ARG_PARAMETER);
00141       ACE_CHECK_RETURN(0);
00142       if (proxy_consumer != 0)
00143       {
00144         ACE_NEW_NORETURN (result,
00145           TAO_Notify_Method_Request_Lookup_Queueable (delivery_request, proxy_consumer));
00146       }
00147       else
00148       {
00149         ACE_ERROR ((LM_ERROR,
00150           ACE_TEXT ("(%P|%t) TAO_Notify_Method_Request_Lookup_No_Copy::unmarshal: unknown proxy id\n")
00151           ));
00152       }
00153     }
00154     else
00155     {
00156       ACE_ERROR ((LM_ERROR,
00157         ACE_TEXT ("(%P|%t) TAO_Notify_Method_Request_Lookup_No_Copy::unmarshal: Cant read proxy id path\n")
00158         ));
00159     }
00160   }
00161   return result;
00162 
00163 }

void TAO_Notify_Method_Request_Lookup::work TAO_Notify_ProxySupplier proxy_supplier  )  [protected, virtual]
 

= TAO_ESF_Worker method

Implements TAO_ESF_Worker< TAO_Notify_ProxySupplier >.

Definition at line 39 of file Method_Request_Lookup.cpp.

References ACE_CHECK, ACE_ENV_ARG_PARAMETER, and ACE_Strong_Bound_Ptr< X, ACE_LOCK >::get().

00042 {
00043   if (delivery_request_.get () == 0)
00044   {
00045     TAO_Notify_Method_Request_Dispatch_No_Copy request (*this, proxy_supplier, true);
00046     proxy_supplier->deliver (request ACE_ENV_ARG_PARAMETER);
00047     ACE_CHECK;
00048   }
00049   else
00050   {
00051     delivery_request_->dispatch (proxy_supplier, true ACE_ENV_ARG_PARAMETER);
00052     ACE_CHECK;
00053   }
00054 }


Member Data Documentation

TAO_Notify_ProxyConsumer* TAO_Notify_Method_Request_Lookup::proxy_consumer_ [protected]
 

The Proxy.

Definition at line 72 of file Method_Request_Lookup.h.

Referenced by execute_i().


The documentation for this class was generated from the following files:
Generated on Thu Nov 9 13:32:19 2006 for TAO_CosNotification by doxygen 1.3.6