#include <Event_Handler.h>
Inheritance diagram for ACE_Event_Handler:
Public Types | |
typedef long | Reference_Count |
Reference count type. | |
enum | { LO_PRIORITY = 0, HI_PRIORITY = 10, NULL_MASK = 0, READ_MASK = (1 << 0), WRITE_MASK = (1 << 1), EXCEPT_MASK = (1 << 2), ACCEPT_MASK = (1 << 3), CONNECT_MASK = (1 << 4), TIMER_MASK = (1 << 5), QOS_MASK = (1 << 6), GROUP_QOS_MASK = (1 << 7), SIGNAL_MASK = (1 << 8), ALL_EVENTS_MASK, RWE_MASK, DONT_CALL = (1 << 9) } |
enum | { ACE_EVENT_HANDLER_NOT_RESUMED = -1, ACE_REACTOR_RESUMES_HANDLER = 0, ACE_APPLICATION_RESUMES_HANDLER } |
Public Member Functions | |
virtual | ~ACE_Event_Handler (void) |
Destructor is virtual to enable proper cleanup. | |
virtual ACE_HANDLE | get_handle (void) const |
Get the I/O handle. | |
virtual void | set_handle (ACE_HANDLE) |
Set the I/O handle. | |
virtual int | priority (void) const |
Get the priority of the Event_Handler. | |
virtual void | priority (int priority) |
Set the priority of the Event_Handler. | |
virtual int | handle_input (ACE_HANDLE fd=ACE_INVALID_HANDLE) |
Called when input events occur (e.g., connection or data). | |
virtual int | handle_output (ACE_HANDLE fd=ACE_INVALID_HANDLE) |
virtual int | handle_exception (ACE_HANDLE fd=ACE_INVALID_HANDLE) |
Called when an exceptional events occur (e.g., SIGURG). | |
virtual int | handle_timeout (const ACE_Time_Value ¤t_time, const void *act=0) |
virtual int | handle_exit (ACE_Process *) |
Called when a process exits. | |
virtual int | handle_close (ACE_HANDLE handle, ACE_Reactor_Mask close_mask) |
virtual int | handle_signal (int signum, siginfo_t *=0, ucontext_t *=0) |
virtual int | resume_handler (void) |
virtual int | handle_qos (ACE_HANDLE=ACE_INVALID_HANDLE) |
virtual int | handle_group_qos (ACE_HANDLE=ACE_INVALID_HANDLE) |
virtual void | reactor (ACE_Reactor *reactor) |
Set the event demultiplexors. | |
virtual ACE_Reactor * | reactor (void) const |
Get the event demultiplexors. | |
virtual ACE_Reactor_Timer_Interface * | reactor_timer_interface (void) const |
Get only the reactor's timer related interface. | |
virtual Reference_Count | add_reference (void) |
Increment reference count on the handler. | |
virtual Reference_Count | remove_reference (void) |
Decrement reference count on the handler. | |
Reference_Counting_Policy & | reference_counting_policy (void) |
Current Reference_Counting_Policy. | |
Static Public Member Functions | |
ACE_THR_FUNC_RETURN | read_adapter (void *event_handler) |
int | register_stdin_handler (ACE_Event_Handler *eh, ACE_Reactor *reactor, ACE_Thread_Manager *thr_mgr, int flags=THR_DETACHED) |
int | remove_stdin_handler (ACE_Reactor *reactor, ACE_Thread_Manager *thr_mgr) |
Performs the inverse of the method. | |
Protected Types | |
typedef ACE_Atomic_Op< ACE_SYNCH_MUTEX, Reference_Count > | Atomic_Reference_Count |
Typedef for implementation of reference counting. | |
Protected Member Functions | |
ACE_Event_Handler (ACE_Reactor *=0, int priority=ACE_Event_Handler::LO_PRIORITY) | |
Force ACE_Event_Handler to be an abstract base class. | |
Protected Attributes | |
Atomic_Reference_Count | reference_count_ |
Reference count. | |
Private Attributes | |
int | priority_ |
Priority of this Event_Handler. | |
ACE_Reactor * | reactor_ |
Pointer to the various event demultiplexors. | |
Reference_Counting_Policy | reference_counting_policy_ |
Reference counting requirements. |
Subclasses read/write input/output on an I/O descriptor, handle an exception raised on an I/O descriptor, handle a timer's expiration, or handle a signal.
Definition at line 48 of file Event_Handler.h.
|
Typedef for implementation of reference counting.
Definition at line 292 of file Event_Handler.h. |
|
Reference count type.
Definition at line 204 of file Event_Handler.h. Referenced by remove_reference(). |
|
Definition at line 51 of file Event_Handler.h.
00052 { 00053 LO_PRIORITY = 0, 00054 HI_PRIORITY = 10, 00055 NULL_MASK = 0, 00056 #if defined (ACE_USE_POLL) 00057 READ_MASK = POLLIN, 00058 WRITE_MASK = POLLOUT, 00059 EXCEPT_MASK = POLLPRI, 00060 #else /* USE SELECT */ 00061 READ_MASK = (1 << 0), 00062 WRITE_MASK = (1 << 1), 00063 EXCEPT_MASK = (1 << 2), 00064 #endif /* ACE_USE_POLL */ 00065 ACCEPT_MASK = (1 << 3), 00066 CONNECT_MASK = (1 << 4), 00067 TIMER_MASK = (1 << 5), 00068 QOS_MASK = (1 << 6), 00069 GROUP_QOS_MASK = (1 << 7), 00070 SIGNAL_MASK = (1 << 8), 00071 ALL_EVENTS_MASK = READ_MASK | 00072 WRITE_MASK | 00073 EXCEPT_MASK | 00074 ACCEPT_MASK | 00075 CONNECT_MASK | 00076 TIMER_MASK | 00077 QOS_MASK | 00078 GROUP_QOS_MASK | 00079 SIGNAL_MASK, 00080 RWE_MASK = READ_MASK | 00081 WRITE_MASK | 00082 EXCEPT_MASK, 00083 DONT_CALL = (1 << 9) 00084 }; |
|
Definition at line 138 of file Event_Handler.h.
00139 { 00140 /// The handler is not resumed at all. Could lead to deadlock.. 00141 ACE_EVENT_HANDLER_NOT_RESUMED = -1, 00142 /// The reactor takes responsibility of resuming the handler and 00143 /// is the default 00144 ACE_REACTOR_RESUMES_HANDLER = 0, 00145 /// The application takes responsibility of resuming the handler 00146 ACE_APPLICATION_RESUMES_HANDLER 00147 }; |
|
Destructor is virtual to enable proper cleanup.
Definition at line 33 of file Event_Handler.cpp. References ACE_Reactor::purge_pending_notifications().
00034 { 00035 // ACE_TRACE ("ACE_Event_Handler::~ACE_Event_Handler"); 00036 if (this->reactor_ != 0) 00037 { 00038 ACE_Errno_Guard guard (errno); // purge may get ENOTSUP 00039 this->reactor_->purge_pending_notifications (this); 00040 } 00041 } |
|
Force ACE_Event_Handler to be an abstract base class.
Definition at line 23 of file Event_Handler.cpp.
00025 : reference_count_ (1), 00026 priority_ (p), 00027 reactor_ (r), 00028 reference_counting_policy_ (Reference_Counting_Policy::DISABLED) 00029 { 00030 // ACE_TRACE ("ACE_Event_Handler::ACE_Event_Handler"); 00031 } |
|
|
|
|
Called when an exceptional events occur (e.g., SIGURG).
Reimplemented in ACE_NonBlocking_Connect_Handler< SVC_HANDLER >, ACE_Event_Handler_T< T >, and ACE_WIN32_Asynch_Connect. Definition at line 109 of file Event_Handler.cpp. References ACE_TRACE. Referenced by ACE_Select_Reactor_Notify::dispatch_notify(), ACE_Dev_Poll_Reactor_Notify::dispatch_notify(), ACE_WFMO_Reactor_Notify::handle_signal(), and ACE_WFMO_Reactor::upcall().
00110 { 00111 ACE_TRACE ("ACE_Event_Handler::handle_exception"); 00112 return -1; 00113 } |
|
Called when a process exits.
Definition at line 127 of file Event_Handler.cpp. References ACE_TRACE. Referenced by ACE_Process_Manager::notify_proc_handler().
00128 { 00129 ACE_TRACE ("ACE_Event_Handler::handle_exit"); 00130 return -1; 00131 } |
|
Definition at line 161 of file Event_Handler.cpp. References ACE_TRACE. Referenced by ACE_Select_Reactor_Notify::dispatch_notify(), ACE_WFMO_Reactor_Notify::handle_signal(), and ACE_WFMO_Reactor::upcall().
00162 { 00163 ACE_TRACE ("ACE_Event_Handler::handle_group_qos"); 00164 return -1; 00165 } |
|
Called when input events occur (e.g., connection or data).
Reimplemented in ACE_Acceptor< SVC_HANDLER, >, ACE_Oneshot_Acceptor< SVC_HANDLER, >, ACE_NonBlocking_Connect_Handler< SVC_HANDLER >, ACE_Dev_Poll_Reactor_Notify, ACE_Event_Handler_T< T >, ACE_POSIX_Asynch_Accept, ACE_Select_Reactor_Notify, ACE_Service_Manager, ACE_WIN32_Asynch_Connect, and ACE_Acceptor< SVC_HANDLER, ACE_PEER_ACCEPTOR_2 >. Definition at line 91 of file Event_Handler.cpp. References ACE_TRACE. Referenced by ACE_Select_Reactor_Notify::dispatch_notify(), ACE_Dev_Poll_Reactor_Notify::dispatch_notify(), ACE_WFMO_Reactor_Notify::handle_signal(), read_adapter(), and ACE_WFMO_Reactor::upcall().
00092 { 00093 ACE_TRACE ("ACE_Event_Handler::handle_input"); 00094 return -1; 00095 } |
|
Called when output events are possible (e.g., when flow control abates or non-blocking connection completes). Reimplemented in ACE_NonBlocking_Connect_Handler< SVC_HANDLER >, ACE_Event_Handler_T< T >, ACE_POSIX_Asynch_Connect, and ACE_WIN32_Asynch_Connect. Definition at line 100 of file Event_Handler.cpp. References ACE_TRACE. Referenced by ACE_Select_Reactor_Notify::dispatch_notify(), ACE_Dev_Poll_Reactor_Notify::dispatch_notify(), ACE_WFMO_Reactor_Notify::handle_signal(), and ACE_WFMO_Reactor::upcall().
00101 { 00102 ACE_TRACE ("ACE_Event_Handler::handle_output"); 00103 return -1; 00104 } |
|
Definition at line 154 of file Event_Handler.cpp. References ACE_TRACE. Referenced by ACE_Select_Reactor_Notify::dispatch_notify(), ACE_WFMO_Reactor_Notify::handle_signal(), and ACE_WFMO_Reactor::upcall().
00155 { 00156 ACE_TRACE ("ACE_Event_Handler::handle_qos"); 00157 return -1; 00158 } |
|
Called when object is signaled by OS (either via UNIX signals or when a Win32 object becomes signaled). Reimplemented in ACE_Strategy_Acceptor< SVC_HANDLER, >, ACE_Event_Handler_T< T >, ACE_MMAP_Memory_Pool, ACE_Process_Manager, ACE_Service_Manager, ACE_Shared_Memory_Pool, ACE_Sig_Adapter, ACE_Test_and_Set< ACE_LOCK, TYPE >, ACE_Async_Timer_Queue_Adapter< TQ >, ACE_Wakeup_All_Threads_Handler, ACE_WFMO_Reactor_Notify, and ACE_WIN32_Proactor. Definition at line 136 of file Event_Handler.cpp. References ACE_TRACE, and ucontext_t. Referenced by ACE_Sig_Handler::dispatch(), ACE_Sig_Adapter::handle_signal(), and ACE_WFMO_Reactor::simple_dispatch_handler().
00137 { 00138 ACE_TRACE ("ACE_Event_Handler::handle_signal"); 00139 return -1; 00140 } |
|
Called when timer expires. represents the current time that the was selected for timeout dispatching and is the asynchronous completion token that was passed in when was invoked. Reimplemented in ACE_Oneshot_Acceptor< SVC_HANDLER, >, ACE_NonBlocking_Connect_Handler< SVC_HANDLER >, ACE_Event_Handler_T< T >, ACE_Logging_Strategy, ACE_Svc_Handler<, >, ACE_Buffered_Svc_Handler<, >, and ACE_Svc_Handler< ACE_PEER_STREAM_2, ACE_SYNCH_USE >. Definition at line 118 of file Event_Handler.cpp. References ACE_TRACE. Referenced by ACE_Event_Handler_Handle_Timeout_Upcall< ACE_LOCK >::timeout().
00119 { 00120 ACE_TRACE ("ACE_Event_Handler::handle_timeout"); 00121 return -1; 00122 } |
|
Set the priority of the Event_Handler.
Definition at line 72 of file Event_Handler.cpp. References ACE_TRACE, and priority_.
|
|
Get the priority of the Event_Handler.
Definition at line 63 of file Event_Handler.cpp. References ACE_TRACE, and priority_. Referenced by ACE_Priority_Reactor::build_bucket().
|
|
|
Set the event demultiplexors.
Reimplemented in ACE_Connector< SVC_HANDLER, >, and ACE_Connector< SVC_HANDLER, ACE_PEER_CONNECTOR_2 >. Definition at line 168 of file Event_Handler.cpp. References ACE_TRACE. Referenced by ACE_Reactor::notify(), read_adapter(), ACE_Reactor::register_handler(), register_stdin_handler(), ACE_Reactor::schedule_timer(), ACE_Reactor::schedule_wakeup(), and ACE_Event_Handler_Handle_Timeout_Upcall< ACE_LOCK >::timeout().
|
|
Get only the reactor's timer related interface.
Definition at line 182 of file Event_Handler.cpp. References ACE_TRACE. Referenced by ACE_Event_Handler_Handle_Timeout_Upcall< ACE_LOCK >::timeout().
|
|
Used to read from non-socket ACE_HANDLEs in our own thread to work around Win32 limitations that don't allow us to on non-sockets (such as ACE_STDIN). This is commonly used in situations where the Reactor is used to demultiplex read events on ACE_STDIN on UNIX. Note that must be a subclass of ACE_Event_Handler. If the method of this event handler returns we default to reading from ACE_STDIN. Definition at line 254 of file Event_Handler.cpp. References ACE_STDIN, handle_close(), handle_input(), ACE_Reactor::notify(), reactor(), and READ_MASK. Referenced by register_stdin_handler().
00255 { 00256 ACE_Event_Handler *this_ptr = static_cast<ACE_Event_Handler *> (args); 00257 ACE_Reactor *r = this_ptr->reactor (); 00258 00259 while (this_ptr->handle_input (ACE_STDIN) != -1) 00260 continue; 00261 00262 this_ptr->handle_close (ACE_STDIN, ACE_Event_Handler::READ_MASK); 00263 // It's possible for handle_close() to "delete this" so we need to 00264 // cache the reactor pointer and use it here. 00265 r->notify (); 00266 00267 return 0; 00268 } |
|
|
Abstracts away from the differences between Win32 and ACE with respect to reading from ACE_STDIN, which is non-'able on Win32. Definition at line 271 of file Event_Handler.cpp. References ACE_STDIN, reactor(), read_adapter(), READ_MASK, ACE_Reactor::register_handler(), and ACE_Thread_Manager::spawn().
00275 { 00276 #if defined (ACE_WIN32) 00277 ACE_UNUSED_ARG (reactor); 00278 00279 eh->reactor (reactor); 00280 return thr_mgr->spawn (&read_adapter, static_cast<void *> (eh), flags); 00281 #else 00282 // Keep compilers happy. 00283 ACE_UNUSED_ARG (flags); 00284 ACE_UNUSED_ARG (thr_mgr); 00285 return reactor->register_handler (ACE_STDIN, 00286 eh, 00287 ACE_Event_Handler::READ_MASK); 00288 #endif /* ACE_WIN32 */ 00289 } |
|
|
Performs the inverse of the method.
Definition at line 292 of file Event_Handler.cpp. References ACE_NOTSUP_RETURN, ACE_STDIN, READ_MASK, and ACE_Reactor::remove_handler().
00294 { 00295 #if defined (ACE_WIN32) 00296 ACE_UNUSED_ARG (reactor); 00297 ACE_UNUSED_ARG (thr_mgr); 00298 00299 // What should we do here? 00300 ACE_NOTSUP_RETURN (-1); 00301 #else 00302 // Keep compilers happy. 00303 ACE_UNUSED_ARG (thr_mgr); 00304 return reactor->remove_handler (ACE_STDIN, 00305 ACE_Event_Handler::READ_MASK); 00306 #endif /* ACE_WIN32 */ 00307 } |
|
Called to figure out whether the handler needs to resumed by the reactor or the application can take care of it. The default value of 0 would be returned which would allow the reactor to take care of resumption of the handler. The application can return a value more than zero and decide to resume the handler themseleves.
Reimplemented in ACE_NonBlocking_Connect_Handler< SVC_HANDLER >. Definition at line 143 of file Event_Handler.cpp. References ACE_REACTOR_RESUMES_HANDLER, and ACE_TRACE.
00144 { 00145 ACE_TRACE ("ACE_Event_Handler::resume_handler"); 00146 00147 // Return a default value and allow the reactor to take care of 00148 // resuming the handler 00149 return ACE_Event_Handler::ACE_REACTOR_RESUMES_HANDLER; 00150 } |
|
Set the I/O handle.
Reimplemented in ACE_Event_Handler_T< T >, ACE_POSIX_Asynch_Accept, ACE_POSIX_Asynch_Connect, ACE_Svc_Handler<, >, ACE_WIN32_Asynch_Connect, and ACE_Svc_Handler< ACE_PEER_STREAM_2, ACE_SYNCH_USE >. Definition at line 55 of file Event_Handler.cpp. References ACE_TRACE.
00056 { 00057 ACE_TRACE ("ACE_Event_Handler::set_handle"); 00058 } |
|
Priority of this Event_Handler.
Definition at line 300 of file Event_Handler.h. Referenced by priority(). |
|
Pointer to the various event demultiplexors.
Reimplemented in ACE_Asynch_Pseudo_Task, ACE_Connector< SVC_HANDLER, >, ACE_Name_Proxy, and ACE_Connector< SVC_HANDLER, ACE_PEER_CONNECTOR_2 >. Definition at line 303 of file Event_Handler.h. |
|
Reference count.
Definition at line 295 of file Event_Handler.h. Referenced by add_reference(), and remove_reference(). |
|
Reference counting requirements.
Definition at line 306 of file Event_Handler.h. Referenced by reference_counting_policy(). |