# ACE_Buffered_Svc_Handler<, > Class Template Reference

Defines the interface for a service that exchanges data with its connected peer and supports buffering. More...

`#include <Svc_Handler.h>`

Inheritance diagram for ACE_Buffered_Svc_Handler<, >:

[legend]
Collaboration diagram for ACE_Buffered_Svc_Handler<, >:

[legend]
List of all members.

## Public Member Functions

| ACE_Buffered_Svc_Handler (ACE_Thread_Manager *thr_mgr=0, ACE_Message_Queue< ACE_SYNCH_USE > *mq=0, ACE_Reactor *reactor=ACE_Reactor::instance(), size_t max_buffer_size=0, ACE_Time_Value *relative_timeout=0)
virtual | ~ACE_Buffered_Svc_Handler (void)
| Destructor, which calls <flush>.
virtual int | put (ACE_Message_Block *message_block, ACE_Time_Value *timeout=0)
virtual int | flush (void)
virtual int | handle_timeout (const ACE_Time_Value &time, const void *)
void | dump (void) const
| Dump the state of an object.

## Protected Member Functions

virtual int | flush_i (void)

## Protected Attributes

size_t | maximum_buffer_size_
size_t | current_buffer_size_
| Current size in bytes of the <message_queue> contents.
ACE_Time_Value | next_timeout_
| Timeout value used to control when the buffer is flushed.
ACE_Time_Value | interval_
| Interval of the timeout.
ACE_Time_Value * | timeoutp_
| Timeout pointer.

## Detailed Description

### template<ACE_PEER_STREAM_1, ACE_SYNCH_DECL>
class ACE_Buffered_Svc_Handler<, >

Defines the interface for a service that exchanges data with its connected peer and supports buffering.

The buffering feature makes it possible to queue up <ace_message_blocks> in an ACE_Message_Queue until (1) the queue is "full" or (2) a period of time elapses, at which point the queue is "flushed" via <sendv_n> to the peer.

## Constructor & Destructor Documentation

template<PR_ST_1 , ACE_SYNCH_DECL >
ACE_Buffered_Svc_Handler<, >::ACE_Buffered_Svc_Handler | ( | ACE_Thread_Manager * | thr_mgr = `0`,
|  | ACE_Message_Queue< ACE_SYNCH_USE > * | mq = `0`,
|  | ACE_Reactor * | reactor = `ACE_Reactor::instance()`,
|  | size_t | max_buffer_size = `0`,
|  | ACE_Time_Value * | relative_timeout = `0`
| ) |

Constructor initializes the <thr_mgr> and <mq> by passing them down to the <ace_task> base class. The <reactor> is passed to the ACE_Event_Handler. The <max_buffer_size> and <relative_timeout> are used to determine at what point to flush the <mq>. By default, there's no buffering at all. The <relative_timeout> value is interpreted to be in a unit that's relative to the current time returned by <ACE_OS::gettimeofday>.

template<PR_ST_1 , ACE_SYNCH_DECL >
ACE_Buffered_Svc_Handler<, >::~ACE_Buffered_Svc_Handler | ( | void |  | ) | `[virtual]`

| Destructor, which calls <flush>.

## Member Function Documentation

template<PR_ST_1 , ACE_SYNCH_DECL >
void ACE_Buffered_Svc_Handler<, >::dump | ( | void |  | ) | const

| Dump the state of an object. Reimplemented from ACE_Svc_Handler< ACE_PEER_STREAM_2, ACE_SYNCH_USE >.

template<PR_ST_1 , ACE_SYNCH_DECL >
int ACE_Buffered_Svc_Handler<, >::flush | ( | void |  | ) | `[virtual]`

| Flush the ACE_Message_Queue, which writes all the queued ACE_Message_Blocks to the <peer_stream>.

template<PR_ST_1 , ACE_SYNCH_DECL >
int ACE_Buffered_Svc_Handler<, >::flush_i | ( | void |  | ) | `[protected, virtual]`

| Implement the flush operation on the ACE_Message_Queue, which writes all the queued ACE_Message_Blocks to the <peer_stream>. Assumes that the caller holds the lock.

template<PR_ST_1 , ACE_SYNCH_DECL >
int ACE_Buffered_Svc_Handler<, >::handle_timeout | ( | const ACE_Time_Value & | time,
|  | const void * |
| ) | `[virtual]`

| This method is not currently implemented -- this is where the integration with the <reactor> would occur. Reimplemented from ACE_Svc_Handler< ACE_PEER_STREAM_2, ACE_SYNCH_USE >.

template<PR_ST_1 , ACE_SYNCH_DECL >
int ACE_Buffered_Svc_Handler<, >::put | ( | ACE_Message_Block * | message_block,
|  | ACE_Time_Value * | timeout = `0`
| ) | `[virtual]`

| Insert the ACE_Message_Block chain rooted at <message_block> into the ACE_Message_Queue with the designated <timeout>. The <flush> method will be called if this <put> causes the number of bytes to exceed the maximum buffer size or if the timeout period has elapsed. Reimplemented from ACE_Task_Base.

## Member Data Documentation

template<ACE_PEER_STREAM_1 , ACE_SYNCH_DECL >
size_t ACE_Buffered_Svc_Handler<, >::current_buffer_size_ `[protected]`

| Current size in bytes of the <message_queue> contents.

template<ACE_PEER_STREAM_1 , ACE_SYNCH_DECL >
ACE_Time_Value ACE_Buffered_Svc_Handler<, >::interval_ `[protected]`

| Interval of the timeout.

template<ACE_PEER_STREAM_1 , ACE_SYNCH_DECL >
size_t ACE_Buffered_Svc_Handler<, >::maximum_buffer_size_ `[protected]`

| Maximum size the <message_queue> can be before we have to flush the buffer.

template<ACE_PEER_STREAM_1 , ACE_SYNCH_DECL >
ACE_Time_Value ACE_Buffered_Svc_Handler<, >::next_timeout_ `[protected]`

| Timeout value used to control when the buffer is flushed.

template<ACE_PEER_STREAM_1 , ACE_SYNCH_DECL >
ACE_Time_Value* ACE_Buffered_Svc_Handler<, >::timeoutp_ `[protected]`

| Timeout pointer.

The documentation for this class was generated from the following files:

- Svc_Handler.h
- Svc_Handler.cpp