summaryrefslogtreecommitdiff
path: root/ACE/examples/Timer_Queue/Reactor_Timer_Queue_Test.h
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/examples/Timer_Queue/Reactor_Timer_Queue_Test.h')
-rw-r--r--ACE/examples/Timer_Queue/Reactor_Timer_Queue_Test.h153
1 files changed, 153 insertions, 0 deletions
diff --git a/ACE/examples/Timer_Queue/Reactor_Timer_Queue_Test.h b/ACE/examples/Timer_Queue/Reactor_Timer_Queue_Test.h
new file mode 100644
index 00000000000..3db20728814
--- /dev/null
+++ b/ACE/examples/Timer_Queue/Reactor_Timer_Queue_Test.h
@@ -0,0 +1,153 @@
+/* -*- C++ -*- */
+
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// examples
+//
+// = FILENAME
+// Reactor_Timer_Queue_Test.h
+//
+// = DESCRIPTION
+// This code is an implementation of a test driver for a reactor based
+// timer queue.
+//
+// = AUTHORS
+// Nanbor Wang <nw1@cs.wustl.edu> and
+// Sergio Flores-Gaitan <sergio@cs.wustl.edu>
+//
+// ============================================================================
+
+#ifndef _REACTOR_TIMER_QUEUE_TEST_H_
+#define _REACTOR_TIMER_QUEUE_TEST_H_
+
+#include "Driver.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+/// @@todo: Not sure why this needs to be included. But am sure that,
+/// there is some circular dependency setup. Needs to be
+/// fixed. Atleast on g++
+#include "ace/Timer_Queue.h"
+#include "ace/Timer_Heap.h"
+#include "ace/svc_export.h"
+
+class Reactor_Timer_Queue_Test_Driver;
+
+class Input_Handler : public ACE_Event_Handler
+{
+ // = TITLE
+ // Implements the handler to be called for input events. Also has
+ // the logic to handle the different timer queue operations (i.e.,
+ // schedule, cancel, list, shutdown).
+ //
+ // = DESCRIPTION
+ // This class handles the reading of user input from stdin. Also
+ // has the logic to handle the commands that are to be invoked in
+ // response to the user input.
+public:
+ typedef int (Input_Handler::*ACTION) (void *);
+
+ Input_Handler (ACE_Timer_Queue *tq,
+ Reactor_Timer_Queue_Test_Driver &timer_queue_driver);
+ // Sets <done_> flag to 0, <driver_> to <timer_queue_driver> and
+ // timer queue <tq_> to <tq>
+
+ int handle_input (ACE_HANDLE);
+ // Hook method for the <ACE_Reactor> to call whenever there is input
+ // ready to be read.
+
+ int done (void);
+ // returns the value for <done_> that indicates whether we are
+ // exiting the program.A value of 0 indicates that we are NOT done,
+ // 1 otherwise.
+
+ // = Hook methods to be called from <Reactor_Timer_Queue_Test_Driver>
+
+ int schedule_timer (void *argument);
+ // Schedule a timer. The (void *) will be mapped to the delay
+ // parameter for the timer queue schedule method.
+
+ int cancel_timer (void *argument);
+ // Cancel a timer. The (void *) will be mapped to the ID of the
+ // timer being cancelled.
+
+ int list_timer (void *argument);
+ // Dump the timers in the queue. The argument is ignored.
+
+ int shutdown_timer (void *argument);
+ // Processes the request to exit the timer queue application.
+ // argument is ignored.
+
+private:
+ ACE_Timer_Queue *tq_;
+ // Keep a pointer to the timer queue we are using so we can traverse
+ // the queue.
+
+ int done_;
+ // Flag used to close down program.
+
+ Reactor_Timer_Queue_Test_Driver &driver_;
+ // Test driver. Used to call hook methods that are common code for
+ // all drivers.
+};
+
+class ACE_Svc_Export Reactor_Timer_Queue_Test_Driver : public Timer_Queue_Test_Driver <ACE_Timer_Heap, Input_Handler, Input_Handler::ACTION>
+{
+ // = TITLE
+ // Implements a test driver for a reactive timer queue using
+ // <ACE_Reactor>.
+ //
+ // = DESCRIPTION
+ // This class implements the logic to test the reactor
+ // implementation of timer queue, using an <ACE_Timer_Heap>.
+public:
+ Reactor_Timer_Queue_Test_Driver (void);
+ // Sets the input handler <thandler_> with <timer_queue_> from the
+ // <Timer_Queue_Test_Driver> class and a reference to "this", so the
+ // input handler can call hook methods from the driver. Such
+ // methods are the common factored out code from other
+ // implementations of timer queues.
+
+ virtual ~Reactor_Timer_Queue_Test_Driver (void);
+ // Default destructor
+
+ virtual int display_menu (void);
+ // Prints the menu of options.
+
+ virtual int init (void);
+ // Sets the timer queue that the REACTOR will use; registers the
+ // stdin input handler with the REACTOR and sets the <Command>s that
+ // the <Timer_Queue_Test_Driver> will execute().
+
+ virtual int run_test (void);
+ // Main entry point to the test driver implementation.
+
+private:
+ Input_Handler thandler_;
+ // This is the stdin handler.
+};
+
+class Reactor_Timer_Handler : public ACE_Event_Handler
+{
+ // = TITLE
+ // Target of the reactive timeout operation.
+public:
+ virtual int handle_timeout (const ACE_Time_Value &tv,
+ const void *);
+ // Hook method that is called by the reactor when a timer expires.
+ // It prints the timer ID and the time it expired.
+
+ void set_timer_id (long tid);
+ // Sets the timer id for this handler <tid_> to <tid>
+
+private:
+ long tid_;
+ // timer ID.
+};
+
+#endif /* _REACTOR_TIMER_QUEUE_TEST_H_ */