#include <Queued_Message.h>
Inheritance diagram for TAO_Queued_Message:
Public Methods | |
TAO_Queued_Message (ACE_Allocator *alloc=0) | |
Constructor. More... | |
virtual | ~TAO_Queued_Message (void) |
Destructor. More... | |
Intrusive list manipulation | |
The messages are put in a doubled linked list (for easy insertion and removal).
To minimize memory allocations the list is intrusive, i.e. each element in the list contains the pointers for the next and previous element. The following methods are used to manipulate this implicit list.
| |
virtual TAO_Queued_Message * | next (void) const |
Set/get the next element in the list. More... | |
virtual TAO_Queued_Message * | prev (void) const |
Set/get the previous element in the list. More... | |
virtual void | remove_from_list (TAO_Queued_Message *&head, TAO_Queued_Message *&tail) |
Remove this element from the list. More... | |
virtual void | push_back (TAO_Queued_Message *&head, TAO_Queued_Message *&tail) |
Insert the current element at the tail of the queue. More... | |
virtual void | push_front (TAO_Queued_Message *&head, TAO_Queued_Message *&tail) |
Insert the current element at the head of the queue. More... | |
Template Methods | |
virtual size_t | message_length (void) const=0 |
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=0 |
Return 1 if all the data has been sent. More... | |
virtual void | fill_iov (int iovcnt_max, int &iovcnt, iovec iov[]) const=0 |
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)=0 |
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_Message * | clone (ACE_Allocator *allocator)=0 |
Clone this element. More... | |
virtual void | destroy (void)=0 |
Reliable messages are allocated from the stack, thus they do not be deallocated. More... | |
Protected Attributes | |
ACE_Allocator * | allocator_ |
int | is_heap_created_ |
Private Attributes | |
TAO_Queued_Message * | next_ |
Implement an intrusive double-linked list for the message queue. More... | |
TAO_Queued_Message * | prev_ |
Please read the documentation in the TAO_Transport class to find out more about the design of the outgoing data path.
In some configurations TAO needs to maintain a per-connection queue of outgoing messages. This queue is drained by the pluggable protocols framework, normally under control of the ACE_Reactor, but other configurations are conceivable. The elements in the queue may may removed early, for example, because the application can specify timeouts for each message, or because the underlying connection is broken.
In many cases the message corresponds to some application request, the application may be blocked waiting for the request to be sent, even more importantlyl, the ORB can be configured to use the Leader/Followers strategy, in which case one of the waiting threads can be required to wake up before its message completes each message may contain a 'Sent_Notifier'
|
Constructor.
|
|
Destructor.
|
|
Return 1 if all the data has been sent.
Reimplemented in TAO_Asynch_Queued_Message, and TAO_Synch_Queued_Message. |
|
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.
Reimplemented in TAO_Asynch_Queued_Message, and TAO_Synch_Queued_Message. |
|
Clone this element.
Reimplemented in TAO_Asynch_Queued_Message, and TAO_Synch_Queued_Message. |
|
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 in TAO_Asynch_Queued_Message, and TAO_Synch_Queued_Message. |
|
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.
Reimplemented in TAO_Asynch_Queued_Message, and TAO_Synch_Queued_Message. |
|
If the message has been partially sent it returns the number of bytes that are still not sent.
Reimplemented in TAO_Asynch_Queued_Message, and TAO_Synch_Queued_Message. |
|
Set/get the next element in the list.
|
|
Set/get the previous element in the list.
|
|
Insert the current element at the tail of the queue.
|
|
Insert the current element at the head of the queue.
|
|
Remove this element from the list.
|
|
|
|
|
|
Implement an intrusive double-linked list for the message queue.
|
|
|