summaryrefslogtreecommitdiff
path: root/ace/Svc_Handler.h
diff options
context:
space:
mode:
authorschmidt <douglascraigschmidt@users.noreply.github.com>1999-06-09 21:51:54 +0000
committerschmidt <douglascraigschmidt@users.noreply.github.com>1999-06-09 21:51:54 +0000
commit9c8ea09de3b59afd0bc3e84c2241fbb346175721 (patch)
treebc2dc54deb9aff3a205031cc9ec7ff3f62fd7a8b /ace/Svc_Handler.h
parentbc0265b91128210785c1f18354e5a63ddc03fd98 (diff)
downloadATCD-9c8ea09de3b59afd0bc3e84c2241fbb346175721.tar.gz
.
Diffstat (limited to 'ace/Svc_Handler.h')
-rw-r--r--ace/Svc_Handler.h87
1 files changed, 65 insertions, 22 deletions
diff --git a/ace/Svc_Handler.h b/ace/Svc_Handler.h
index 0be5a242ec3..a1251999404 100644
--- a/ace/Svc_Handler.h
+++ b/ace/Svc_Handler.h
@@ -50,14 +50,10 @@ public:
// = Initialization and termination methods.
ACE_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 *timeout = 0);
+ ACE_Reactor *reactor = ACE_Reactor::instance ());
// 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 <timeout> are
- // used to determine at what point to flush the <mq>. By default,
- // there's no buffering at all.
+ // the <ACE_Event_Handler>.
virtual ~ACE_Svc_Handler (void);
// Destructor.
@@ -70,18 +66,6 @@ public:
// Object termination hook -- application-specific cleanup code goes
// here.
- virtual int put (ACE_Message_Block *message_block,
- ACE_Time_Value *timeout = 0);
- // 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.
-
- virtual int flush (void);
- // Flush the <ACE_Message_Queue>, which writes all the queued
- // <ACE_Message_Block>s to the <PEER_STREAM>.
-
virtual int idle (u_long flags = 0);
// Call this method if you want to recycling the <Svc_Handler>
// instead of closing it. If the object does not have a recycler,
@@ -154,8 +138,9 @@ public:
public:
- // Note: The following methods are not suppose to be public. But
- // because friendship is *not* inherited in C++, these methods have
+ // = The following methods are not suppose to be public.
+
+ // Because friendship is *not* inherited in C++, these methods have
// to be public.
// = Accessors to set/get the connection recycler.
@@ -177,7 +162,7 @@ public:
// recycling. Return 0 if the object is ready for recycling, -1 on
// failures.
-private:
+protected:
ACE_PEER_STREAM peer_;
// Maintain connection with client.
@@ -194,14 +179,72 @@ private:
const void *recycling_act_;
// Asynchronous Completion Token (ACT) to be used to when talking to
// the recycler.
+};
+template <ACE_PEER_STREAM_1, ACE_SYNCH_DECL>
+class ACE_Buffered_Svc_Handler : public ACE_Svc_Handler<ACE_PEER_STREAM_2, ACE_SYNCH_USE>
+{
+ // = TITLE
+ // Defines the interface for a service that exchanges data with
+ // its connected peer and supports buffering.
+ //
+ // = DESCRIPTION
+ // 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.
+public:
+ // = Initialization and termination methods.
+ 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>.
+
+ virtual ~ACE_Buffered_Svc_Handler (void);
+ // Destructor, which calls <flush>.
+
+ virtual int put (ACE_Message_Block *message_block,
+ ACE_Time_Value *timeout = 0);
+ // 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.
+
+ virtual int flush (void);
+ // Flush the <ACE_Message_Queue>, which writes all the queued
+ // <ACE_Message_Block>s to the <PEER_STREAM>.
+
+ virtual int handle_timeout (const ACE_Time_Value &time,
+ const void *);
+ // This method is not currently implemented -- this is where the
+ // integration with the <Reactor> would occur.
+
+ void dump (void) const;
+ // Dump the state of an object.
+
+protected:
size_t maximum_buffer_size_;
// Maximum size the <Message_Queue> can be before we have to flush
// the buffer.
+
+ size_t current_buffer_size_;
+ // Current size in bytes of the <Message_Queue> contents.
- ACE_Time_Value timeout_;
+ 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.
};