Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes

TAO_Asynch_Reply_Dispatcher_Base Class Reference

Base class for TAO_Asynch_Reply_Dispatcher and TAO_DII_Deferred_Reply_Dispatcher. More...

#include <Asynch_Reply_Dispatcher_Base.h>

Inheritance diagram for TAO_Asynch_Reply_Dispatcher_Base:
Inheritance graph
[legend]
Collaboration diagram for TAO_Asynch_Reply_Dispatcher_Base:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 TAO_Asynch_Reply_Dispatcher_Base (TAO_ORB_Core *orb_core, ACE_Allocator *allocator=0)
 Default constructor.
void transport (TAO_Transport *t)
 Sets the transport for this invocation.
virtual long schedule_timer (CORBA::ULong, const ACE_Time_Value &)=0
 Install the timeout handler.
bool try_dispatch_reply (void)
 A helper method that can be used by the subclasses.

Protected Member Functions

virtual ~TAO_Asynch_Reply_Dispatcher_Base (void)
 Destructor.

Protected Attributes

IOP::ServiceContextList reply_service_info_
 The service context list.
char buf_ [ACE_CDR::DEFAULT_BUFSIZE]
 The buffer that is used to initialise the data block.
ACE_Data_Block db_
TAO_InputCDR reply_cdr_
TAO_Transporttransport_
 This invocation is using this transport, may change...

Private Member Functions

void operator= (const TAO_Asynch_Reply_Dispatcher_Base &)
 TAO_Asynch_Reply_Dispatcher_Base (const TAO_Asynch_Reply_Dispatcher_Base &)

Private Attributes

ACE_Locklock_
 Lock to protect is_reply_dispatched_ flag.
bool is_reply_dispatched_
 Has the reply been dispatched?

Detailed Description

Base class for TAO_Asynch_Reply_Dispatcher and TAO_DII_Deferred_Reply_Dispatcher.

Definition at line 45 of file Asynch_Reply_Dispatcher_Base.h.


Constructor & Destructor Documentation

TAO_Asynch_Reply_Dispatcher_Base::TAO_Asynch_Reply_Dispatcher_Base ( TAO_ORB_Core orb_core,
ACE_Allocator allocator = 0 
)

Default constructor.

Definition at line 20 of file Asynch_Reply_Dispatcher_Base.cpp.

TAO_Asynch_Reply_Dispatcher_Base::~TAO_Asynch_Reply_Dispatcher_Base ( void   )  [protected, virtual]

Destructor.

Definition at line 47 of file Asynch_Reply_Dispatcher_Base.cpp.

{
  // Release the transport that we own
  if (this->transport_ != 0)
    this->transport_->remove_reference ();

  if (this->lock_)
    delete this->lock_;
}

TAO_Asynch_Reply_Dispatcher_Base::TAO_Asynch_Reply_Dispatcher_Base ( const TAO_Asynch_Reply_Dispatcher_Base  )  [private]

Member Function Documentation

void TAO_Asynch_Reply_Dispatcher_Base::operator= ( const TAO_Asynch_Reply_Dispatcher_Base  )  [private]
virtual long TAO_Asynch_Reply_Dispatcher_Base::schedule_timer ( CORBA::ULong  ,
const ACE_Time_Value  
) [pure virtual]

Install the timeout handler.

Implemented in TAO_DII_Deferred_Reply_Dispatcher, and TAO_Asynch_Reply_Dispatcher.

void TAO_Asynch_Reply_Dispatcher_Base::transport ( TAO_Transport t  ) 

Sets the transport for this invocation.

Definition at line 58 of file Asynch_Reply_Dispatcher_Base.cpp.

{
  if (this->transport_ != 0)
    this->transport_->remove_reference ();

  this->transport_ = t;

  this->transport_->add_reference ();
}

bool TAO_Asynch_Reply_Dispatcher_Base::try_dispatch_reply ( void   ) 

A helper method that can be used by the subclasses.

The semantics of this helper method needs careful attention. A call to this method will do the following

  • If the reply has already been dispatched, the return value will be false to signify not to try.
  • If the reply has not been dispatched, this method will set the flag to be true and return a true value to signify that the caller thread can go ahead and dispatch reply.

Why are we clumping everything in one method. Answer is we need atomicity?

Definition at line 69 of file Asynch_Reply_Dispatcher_Base.cpp.

{
  if (this->is_reply_dispatched_)
    {
      return false;
    }
  else
    {
      ACE_GUARD_RETURN (ACE_Lock,
                        mutex,
                        *this->lock_,
                        false);

      if (!this->is_reply_dispatched_)
        {
          this->is_reply_dispatched_ = true;
          return true;
        }
    }

  return false;
}


Member Data Documentation

The buffer that is used to initialise the data block.

Reimplemented in TAO_DII_Asynch_Reply_Dispatcher.

Definition at line 97 of file Asynch_Reply_Dispatcher_Base.h.

Datablock that is created on the stack to initialise the CDR stream underneath.

Reimplemented in TAO_DII_Asynch_Reply_Dispatcher.

Definition at line 101 of file Asynch_Reply_Dispatcher_Base.h.

Has the reply been dispatched?

Definition at line 115 of file Asynch_Reply_Dispatcher_Base.h.

Lock to protect is_reply_dispatched_ flag.

Definition at line 112 of file Asynch_Reply_Dispatcher_Base.h.

CDR stream which has the reply information that needs to be demarshalled by the stubs

Reimplemented in TAO_DII_Asynch_Reply_Dispatcher.

Definition at line 105 of file Asynch_Reply_Dispatcher_Base.h.

IOP::ServiceContextList TAO_Asynch_Reply_Dispatcher_Base::reply_service_info_ [protected]

The service context list.

Note, that this is not a reference as in the synchronous case. We own the reply_service_info because our TAO_Asynch_Invocation or TAO_DII_Deferred_Invocation will go out of scope before we are done.

Definition at line 94 of file Asynch_Reply_Dispatcher_Base.h.

This invocation is using this transport, may change...

Definition at line 108 of file Asynch_Reply_Dispatcher_Base.h.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines