diff options
Diffstat (limited to 'TAO/tao/SHMIOP_Connect.h')
-rw-r--r-- | TAO/tao/SHMIOP_Connect.h | 156 |
1 files changed, 69 insertions, 87 deletions
diff --git a/TAO/tao/SHMIOP_Connect.h b/TAO/tao/SHMIOP_Connect.h index a21f3a27217..7e0c4bde1ae 100644 --- a/TAO/tao/SHMIOP_Connect.h +++ b/TAO/tao/SHMIOP_Connect.h @@ -28,91 +28,15 @@ #include "ace/Reactor.h" #include "ace/Acceptor.h" -#include "ace/MEM_Acceptor.h" -#include "ace/Synch.h" -#include "ace/Svc_Handler.h" - #include "tao/corbafwd.h" #include "tao/Wait_Strategy.h" - +#include "tao/Connection_Handler.h" #include "tao/SHMIOP_Transport.h" -// Forward Decls -class TAO_ORB_Core; -class TAO_ORB_Core_TSS_Resources; - - -typedef ACE_Svc_Handler<ACE_MEM_STREAM, ACE_NULL_SYNCH> - TAO_SHMIOP_SVC_HANDLER; - // **************************************************************** -class TAO_SHMIOP_Handler_Base : public TAO_SHMIOP_SVC_HANDLER -{ -public: - TAO_SHMIOP_Handler_Base (ACE_Thread_Manager *t); - TAO_SHMIOP_Handler_Base (TAO_ORB_Core *orb_core); - - virtual TAO_Transport *transport (void) = 0; -}; - -class TAO_Export TAO_SHMIOP_Client_Connection_Handler : public TAO_SHMIOP_Handler_Base -{ - // = TITLE - // <Svc_Handler> used on the client side and returned by the - // <TAO_CONNECTOR>. -public: - // = Intialization method. - TAO_SHMIOP_Client_Connection_Handler (ACE_Thread_Manager *t = 0, - TAO_ORB_Core* orb_core = 0, - CORBA::Boolean flag = 0); - - virtual ~TAO_SHMIOP_Client_Connection_Handler (void); - - // = <Connector> hook. - virtual int open (void *); - // Activation template method. - - // = Event Handler overloads - - virtual int handle_input (ACE_HANDLE = ACE_INVALID_HANDLE); - // Called when a response from a twoway invocation is available. - - virtual int handle_timeout (const ACE_Time_Value &tv, - const void *arg = 0); - // Called when buffering timer expires. - - virtual int handle_close (ACE_HANDLE = ACE_INVALID_HANDLE, - ACE_Reactor_Mask = ACE_Event_Handler::NULL_MASK); - // Perform appropriate closing. - - virtual int handle_close_i (ACE_HANDLE = ACE_INVALID_HANDLE, - ACE_Reactor_Mask = ACE_Event_Handler::NULL_MASK); - // Perform appropriate closing but without grabbing any locks. - - virtual int close (u_long flags = 0); - // Object termination hook. - - virtual TAO_Transport *transport (void); - // Return the transport objects - -protected: - int handle_cleanup (void); - // This method deregisters the handler from the reactor and closes it. - - TAO_SHMIOP_Client_Transport transport_; - // Reference to the transport object, it is owned by this class. - - TAO_ORB_Core *orb_core_; - // Cached ORB Core. - - CORBA::Boolean lite_flag_; - // Are we using lite? -}; - -// **************************************************************** - -class TAO_Export TAO_SHMIOP_Server_Connection_Handler : public TAO_SHMIOP_Handler_Base +class TAO_Export TAO_SHMIOP_Server_Connection_Handler : public TAO_SHMIOP_SVC_HANDLER, + public TAO_Connection_Handler { // = TITLE // Handles requests on a single connection in a server. @@ -151,6 +75,9 @@ public: TAO_Transport *transport (void); + virtual ACE_HANDLE fetch_handle (void); + // Return the underlying handle + protected: // = Event Handler overloads @@ -175,22 +102,77 @@ protected: TAO_Pluggable_Messaging *acceptor_factory_; // Messaging acceptor factory - TAO_ORB_Core *orb_core_; - // Cached ORB Core. - - TAO_ORB_Core_TSS_Resources *tss_resources_; - // Cached tss resources of the ORB that activated this object. - u_long refcount_; // Reference count. It is used to count nested upcalls on this // svc_handler i.e., the connection can close during nested upcalls, // you should not delete the svc_handler until the stack unwinds // from the nested upcalls. +}; + +// **************************************************************** + +class TAO_Export TAO_SHMIOP_Client_Connection_Handler : public TAO_SHMIOP_SVC_HANDLER, + public TAO_Connection_Handler +{ + // = TITLE + // <Svc_Handler> used on the client side and returned by the + // <TAO_CONNECTOR>. +public: + + // = Intialization method. + TAO_SHMIOP_Client_Connection_Handler (ACE_Thread_Manager *t = 0, + TAO_ORB_Core* orb_core = 0, + CORBA::Boolean flag = 0); + + virtual ~TAO_SHMIOP_Client_Connection_Handler (void); - CORBA::Boolean lite_flag_; - // Should we use GIOP or GIOPlite + // = <Connector> hook. + virtual int open (void *); + // Activation template method. + + // = Event Handler overloads + + virtual int handle_input (ACE_HANDLE = ACE_INVALID_HANDLE); + // Called when a response from a twoway invocation is available. + + virtual int handle_timeout (const ACE_Time_Value &tv, + const void *arg = 0); + // Called when buffering timer expires. + + virtual int handle_close (ACE_HANDLE = ACE_INVALID_HANDLE, + ACE_Reactor_Mask = ACE_Event_Handler::NULL_MASK); + // Perform appropriate closing. + + virtual int handle_close_i (ACE_HANDLE = ACE_INVALID_HANDLE, + ACE_Reactor_Mask = ACE_Event_Handler::NULL_MASK); + // Perform appropriate closing but without grabbing any locks. + + virtual int close (u_long flags = 0); + // Object termination hook. + + virtual TAO_Transport *transport (void); + // Return the transport objects + + virtual ACE_HANDLE fetch_handle (void); + // Return the underlying handle + +protected: + int handle_cleanup (void); + // This method deregisters the handler from the reactor and closes it. + + TAO_SHMIOP_Client_Transport transport_; + // Reference to the transport object, it is owned by this class. + +private: + virtual int handle_input_i (ACE_HANDLE = ACE_INVALID_HANDLE, + ACE_Time_Value *max_wait_time = 0); + // Will not be called at all. As a matter of fact should not be + // called. This is just to override the pure virtual function in the + // TAO_Connection_Handler class }; + + #if defined (__ACE_INLINE__) #include "tao/SHMIOP_Connect.i" #endif /* __ACE_INLINE__ */ |