Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

TAO_Synch_Queued_Message Class Reference

Specialize TAO_Queued_Message for synchronous requests, i.e. twoways and oneways sent with reliability better than SYNC_NONE. More...

#include <Synch_Queued_Message.h>

Inheritance diagram for TAO_Synch_Queued_Message:

Inheritance graph
[legend]
Collaboration diagram for TAO_Synch_Queued_Message:

Collaboration graph
[legend]
List of all members.

Public Methods

 TAO_Synch_Queued_Message (const ACE_Message_Block *contents, ACE_Allocator *alloc=0)
virtual ~TAO_Synch_Queued_Message (void)
 Destructor. More...

const ACE_Message_Blockcurrent_block (void) const
virtual size_t message_length (void) const
 If the message has been partially sent it returns the number of bytes that are still not sent. More...

virtual int all_data_sent (void) const
 Return 1 if all the data has been sent. More...

virtual void fill_iov (int iovcnt_max, int &iovcnt, iovec iov[]) const
 Different versions of this class represent the message using either a single buffer, or a message block. More...

virtual void bytes_transferred (size_t &byte_count)
 After the TAO_Transport class completes a successful (or partially successful) I/O operation it must update the state of all the messages queued. More...

virtual TAO_Queued_Messageclone (ACE_Allocator *alloc)
 Clone this element. More...

virtual void destroy (void)
 Reliable messages are allocated from the stack, thus they do not be deallocated. More...


Private Attributes

ACE_Message_Blockcontents_
 The message is normally generated by a TAO_OutputCDR stream. More...

ACE_Message_Blockcurrent_block_
 The message may be set in multiple writev() operations. More...


Detailed Description

Specialize TAO_Queued_Message for synchronous requests, i.e. twoways and oneways sent with reliability better than SYNC_NONE.

Reliable requests block the sending thread until the message is sent, likewise, the sending thread must be informed if the connection is closed or the message times out.

In contrast oneway (and AMI) requests sent with the SYNC_NONE policy are simple discarded if the connection fails or they timeout.

Another important difference is the management of the data buffer: one SYNC_NONE messages the buffer is immediately copied into a newly allocated buffer, and must be deallocated. Other types of requests use the memory allocated by the sending thread.


Constructor & Destructor Documentation

TAO_Synch_Queued_Message::TAO_Synch_Queued_Message const ACE_Message_Block   contents,
ACE_Allocator   alloc = 0
 

Parameters:
contents  The message block chain that must be sent.
alloc  The allocator that is used to allocate objects of this type.

TAO_Synch_Queued_Message::~TAO_Synch_Queued_Message void    [virtual]
 

Destructor.


Member Function Documentation

int TAO_Synch_Queued_Message::all_data_sent void    const [virtual]
 

Return 1 if all the data has been sent.

Reimplemented from TAO_Queued_Message.

void TAO_Synch_Queued_Message::bytes_transferred size_t &    byte_count [virtual]
 

After the TAO_Transport class completes a successful (or partially successful) I/O operation it must update the state of all the messages queued.

This callback method is used by each message to update its state and determine if all the data has been sent already.

Parameters:
byte_count  The number of bytes succesfully sent. The TAO_Queued_Message should decrement this value by the number of bytes that must still be sent.
Returns:
Returns 1 if the TAO_Queued_Message has any more data to send.

Reimplemented from TAO_Queued_Message.

TAO_Queued_Message * TAO_Synch_Queued_Message::clone ACE_Allocator   alloc [virtual]
 

Clone this element.

Reimplemented from TAO_Queued_Message.

const ACE_Message_Block * TAO_Synch_Queued_Message::current_block void    const
 

void TAO_Synch_Queued_Message::destroy void    [virtual]
 

Reliable messages are allocated from the stack, thus they do not be deallocated.

Asynchronous (SYNC_NONE) messages are allocated from the heap (or a pool), they need to be reclaimed explicitly.

Reimplemented from TAO_Queued_Message.

void TAO_Synch_Queued_Message::fill_iov int    iovcnt_max,
int &    iovcnt,
iovec    iov[]
const [virtual]
 

Different versions of this class represent the message using either a single buffer, or a message block.

This method allows a derived class to fill up the contents of an io vector, the TAO_Transport class uses this method to group as many messages as possible in an iovector before sending them to the OS I/O subsystem.

Parameters:
iovcnt_max  The number of elements in iov
iovcnt  The number of elements already used by iov, this method should update this counter
iov  The io vector

Reimplemented from TAO_Queued_Message.

size_t TAO_Synch_Queued_Message::message_length void    const [virtual]
 

If the message has been partially sent it returns the number of bytes that are still not sent.

Reimplemented from TAO_Queued_Message.


Member Data Documentation

ACE_Message_Block* TAO_Synch_Queued_Message::contents_ [private]
 

The message is normally generated by a TAO_OutputCDR stream.

The application marshals the payload, possibly generating a chain of message block connected via the 'cont()' field.

ACE_Message_Block* TAO_Synch_Queued_Message::current_block_ [private]
 

The message may be set in multiple writev() operations.

This point keeps track of the next message to send out.


The documentation for this class was generated from the following files:
Generated on Thu Oct 10 18:52:22 2002 for TAO by doxygen1.2.13.1 written by Dimitri van Heesch, © 1997-2001