summaryrefslogtreecommitdiff
path: root/ace/Proactor.h
diff options
context:
space:
mode:
Diffstat (limited to 'ace/Proactor.h')
-rw-r--r--ace/Proactor.h267
1 files changed, 0 insertions, 267 deletions
diff --git a/ace/Proactor.h b/ace/Proactor.h
deleted file mode 100644
index 65733afb31d..00000000000
--- a/ace/Proactor.h
+++ /dev/null
@@ -1,267 +0,0 @@
-/* -*- C++ -*- */
-// $Id$
-
-// ============================================================================
-//
-// = LIBRARY
-// ace
-//
-// = FILENAME
-// Proactor.h
-//
-// = AUTHOR
-// Doug Schmidt (schmidt@cs.wustl.edu),
-// Tim Harrison (harrison@cs.wustl.edu), and
-// Irfan Pyarali (ip1@cs.wustl.edu).
-//
-// ============================================================================
-
-#if !defined (ACE_Proactor_H)
-#define ACE_Proactor_H
-
-#include "ace/OS.h"
-#include "ace/Message_Block.h"
-#include "ace/Timer_Queue.h"
-#include "ace/Event_Handler.h"
-
-// Forward declaration.
-class ACE_Overlapped_File;
-
-// Cheshire cat declaration (meow).
-class ACE_Overlapped_IO;
-
-class ACE_Export ACE_Proactor : public ACE_Event_Handler
-// = TITLE
-// An abstraction for Proactive I/O.
-//
-// = DESCRIPTION
-//
-// The ACE_Proactor encapsulates Win32 overlapped I/O. The ACE_Proactor
-// is also an ACE_Event_Handler which can be registered with the
-// ACE_ReactorEx, as follows:
-//
-// int
-// main ()
-// {
-// // ...
-//
-// // Register Proactor with ReactorEx.
-// ACE_Service_Config::reactorEx ()->register_handler
-// (ACE_Service_Config::proactor ());
-//
-// // Demultiplex all ReactorEx and Proactor events from a single
-// // thread.
-// ACE_Service_Config::run_reactorEx_event_loop ();
-//
-// return 42;
-// }
-//
-// This makes it possible to seemlessly integrate the ACE_Proactor (which
-// handles only overlapped I/O) with other forms of Win32 HANDLE-based
-// synchronization (e.g., Mutexes, Semaphores, Threads, Processes, etc.).
-{
-public:
- // = Initialization and termination methods.
-
- ACE_Proactor (size_t number_of_threads = 0, ACE_Timer_Queue *tq = 0);
- // Initialize a proactor. <number_of_threads> is passed to
- // CreateIoCompletionPort.
-
- ~ACE_Proactor (void);
- // Destruction deletes timer_queue_ if one wasn't passed in on
- // construction.
-
- int close (void);
- // Close completion port.
-
- // = Event demultiplexing hooks inherited from Event_Handler.
- virtual int handle_signal (int, siginfo_t * = 0, ucontext_t * = 0);
- // Called back when used in the context of the ReactorEx.
-
- virtual ACE_HANDLE get_handle (void) const;
- // Returns the underlying Win32 Event HANDLE that is used to
- // integrate I/O completion ports with the ReactorEx.
-
- // = Event loop methods.
- virtual int handle_events (ACE_Time_Value *max_wait_time = 0);
- virtual int handle_events (ACE_Time_Value &max_wait_time);
- // Main event loop driver that blocks for <max_wait_time> before
- // returning (will return earlier if I/O or signal events occur).
- // Note that <max_wait_time> can be 0, in which case this method blocks
- // until I/O events or signals occur. handle_events just blocks
- // on GetQueuedCompletionStatus at completion_port_. When I/O
- // completions arrive, it calls back the Event_Handler associated
- // with completed I/O operation. Returns 0 if <max_wait_time> elapses
- // before an event occurs, 1 when if an event occured, and -1 on
- // failure.
-
- // = Communication method.
- virtual int initiate (ACE_Event_Handler *handler,
- ACE_Reactor_Mask mask = ACE_Event_Handler::WRITE_MASK,
- ACE_Message_Block *msg = 0,
- ACE_Overlapped_File *file = 0);
- // Invoke proactive I/O on <handler>. If <msg> == 0, the Proactor
- // will call handler::get_message to obtain an ACE_Message_Block
- // to send/recv according to <mask>. If <mask> ==
- // ACE_Event_Handler::WRITE_MASK, the Proactor calls WriteFile using
- // the <msg> and Event_Handler::get_handle. Returns 1 if the operation
- // succeeded immediately, 0 if the operation is pending (in which
- // case the <handler> will be called back), and -1 if an error
- // occurred. <file> represents the offset into the file to initiate
- // the operation with. When using the proactor for overlapped file
- // I/O, the user is responsible for maintaining the pointer to the
- // file. If you perform multiple initiates with the same or no
- // File_Pointer value, initiate will fill in the same file data into
- // multiple Message_Blocks. <file> is ignored for network I/O or if
- // <file> == 0. If <file> != 0 it is updated (via lseek) respective to
- // the operation initiated.
-
- virtual int cancel_io (ACE_Event_Handler *handler);
- // Cancels all pending input and output (I/O) operations that were
- // issued by the calling thread for the specified <handler>. Does
- // not cancel I/O operations issued for the <handler> by other
- // threads. Returns 0 on success; -1 on failure.
-
- // = Timer management.
- virtual int schedule_timer (ACE_Event_Handler *,
- const void *arg,
- const ACE_Time_Value &delta,
- const ACE_Time_Value &interval = ACE_Time_Value::zero);
- // Schedule an <Event_Handler> that will expire after <delay> amount
- // of time. If it expires then <arg> is passed in as the value to
- // the <Event_Handler>'s <handle_timeout> callback method. If
- // <interval> is != to <ACE_Time_Value::zero> then it is used to
- // reschedule the <Event_Handler> automatically. This method
- // returns a timer handle that uniquely identifies the
- // <Event_Handler> in an internal list. This timer handle can be
- // used to cancel an <Event_Handler> before it expires. The
- // cancellation ensures that timer_ids are unique up to values of
- // greater than 2 billion timers. As long as timers don't stay
- // around longer than this there should be no problems with
- // accidentally deleting the wrong timer.
-
- virtual int cancel_timer (ACE_Event_Handler *handler);
- // Cancel all <Event_Handlers> that match the address of
- // <Event_Handler>.
-
- virtual int cancel_timer (int timer_id, const void **arg = 0);
- // Cancel the single <ACE_Event_Handler> that matches the <timer_id>
- // value (which was returned from the <schedule> method). If arg is
- // non-NULL then it will be set to point to the ``magic cookie''
- // argument passed in when the <Event_Handler> was registered. This
- // makes it possible to free up the memory and avoid memory leaks.
-
-protected:
-
- ACE_Timer_Queue *timer_queue_;
- // Maintains the list of pending timers. Defined as a pointer to
- // allow overriding by derived classes...
-
- int delete_timer_queue_;
- // Keeps track of whether we should delete the timer queue (if we
- // didn't create it, then we don't delete it).
-
- virtual int initiate (ACE_Overlapped_IO *overlapped);
- // Helper to initiate.
-
- int dispatch (ACE_Overlapped_IO *overlapped,
- u_long bytes_transfered,
- int error);
- // Helper function which dispatches results to Event_Handlers.
-
- ACE_HANDLE completion_port_;
- // The completion_port_ is where <handler> should tell a completed
- // I/O operation to queue up. All proactive I/O operation
- // completions queue up on this handle. This handle is set by the
- // <invoke> method.
-
- size_t number_of_threads_;
- // Max threads that will be allowed to run in a completion port.
-
- ACE_Auto_Event shared_event_;
- // Win32 HANDLE associated with every operation that signals when
- // any operation completes (used to transparently integrate the
- // <ACE_Proactor> with the <ACE_ReactorEx>).
-};
-
-class ACE_Export ACE_Overlapped_File
- // = TITLE
- // A wrapper for overlapped file I/O.
- //
- // = DESCRIPTION
- // ACE_Overlapped_File is place-holder for file I/O. When
- // performing overlapped I/O in win32, a file pointer is not
- // managed by the kernel. Instead, the user is responsible for
- // maintaining file pointers for all open files. This wrapper
- // provides an abstraction for a file pointer. The Proactor
- // updates Overlapped_File objects when overlapped I/O operations
- // complete. Eventually, this class may be integrated with
- // ACE_FILE_IO.
-{
-public:
- // = Initialization and termination methods.
- ACE_Overlapped_File (void);
- // Open must be called.
-
- ACE_Overlapped_File (const ACE_Overlapped_File &file);
- // Copy <file>.
-
- ACE_Overlapped_File (const char *file_name, int mode, int perms = 0);
- // Construction of an ACE_Overlapped_File. Calls open.
-
- ~ACE_Overlapped_File (void);
- // Destruction. Calls close.
-
- int open (const char *file_name,
- int access = GENERIC_READ,
- int share = FILE_SHARE_READ,
- LPSECURITY_ATTRIBUTES security = 0,
- int creation = OPEN_EXISTING,
- int flags = FILE_ATTRIBUTE_NORMAL,
- ACE_HANDLE template_file = ACE_INVALID_HANDLE);
- // Opens <file_name> according to <mode> and <perms>. This method
- // is equivalent to CreateFile. Returns 0 on success, -1 on failure
- // with errno == reason.
-
- int open (ACE_HANDLE handle);
- // Uses the given <handle>. Returns 0 on success, -1 on failure.
- // This will only return -1 when <handle> == ACE_INVALID_HANDLE.
-
- void close (void);
- // Closes the file if open. Can be called explicitly, or implicitly
- // through the destructor.
-
- off_t offset (void) const;
- // Return the current offset into the file.
-
- off_t size (void) const;
- // Return the current size of the file.
-
- off_t lseek (off_t offset, int whence);
- // If <whence> == SEEK_SET, then the file pointer is set to
- // <offset>. If <whence> == SEEK_CUR, then the file pointer is set
- // to its current location plus <offset>. If <whence> == SEEK_END,
- // the file pointer is set to the size of the file plus <offset>.
-
- ACE_HANDLE get_handle (void) const;
- // Get the handle to the file.
-
-protected:
- off_t offset_;
- // Current offset into the file.
-
- off_t file_size_;
- // Size of the file.
-
- ACE_HANDLE handle_;
- // Handle to the I/O device.
-
- int delete_handle_;
- // Keeps track of whether we need to delete the <handle_>.
-};
-
-#if defined (__ACE_INLINE__)
-#include "ace/Proactor.i"
-#endif /* __ACE_INLINE__ */
-#endif /* ACE_Proactor_H */
-