diff options
Diffstat (limited to 'ACE/apps/Gateway/Gateway/Connection_Handler.h')
-rw-r--r-- | ACE/apps/Gateway/Gateway/Connection_Handler.h | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/ACE/apps/Gateway/Gateway/Connection_Handler.h b/ACE/apps/Gateway/Gateway/Connection_Handler.h new file mode 100644 index 00000000000..a8a72830135 --- /dev/null +++ b/ACE/apps/Gateway/Gateway/Connection_Handler.h @@ -0,0 +1,157 @@ +/* -*- C++ -*- */ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// gateway +// +// = FILENAME +// Connection_Handler.h +// +// = AUTHOR +// Doug Schmidt +// +// ============================================================================ + +#ifndef _CONNECTION_HANDLER +#define _CONNECTION_HANDLER + +#include "ace/Service_Config.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/SOCK_Connector.h" +#include "ace/Svc_Handler.h" +#include "Config_Files.h" +#include "Options.h" +#include "Event.h" + +// Forward declaration. +class Event_Channel; + +class Connection_Handler : public ACE_Svc_Handler<ACE_SOCK_STREAM, ACE_SYNCH> +{ + // = TITLE + // <Connection_Handler> contains info about connection state and + // addressing. + // + // = DESCRIPTION + // The <Connection_Handler> classes process events sent to the + // Event Channel from Suppliers and forward them to Consumers. +public: + Connection_Handler (void); + // Default constructor (needed to make <ACE_Connector> happy). + + Connection_Handler (const Connection_Config_Info &); + // Real constructor. + + virtual int open (void * = 0); + // Initialize and activate a single-threaded <Connection_Handler> + // (called by <ACE_Connector::handle_output>). + + // = The current state of the Connection_Handler. + enum State + { + IDLE = 1, // Prior to initialization. + CONNECTING, // During connection establishment. + ESTABLISHED, // Connection_Handler is established and active. + DISCONNECTING, // Connection_Handler is in the process of connecting. + FAILED // Connection_Handler has failed. + }; + + // = Set/get the current state. + void state (State); + State state (void) const; + + // = Set/get remote INET addr. + void remote_addr (ACE_INET_Addr &); + const ACE_INET_Addr &remote_addr (void) const; + + // = Set/get local INET addr. + void local_addr (ACE_INET_Addr &); + const ACE_INET_Addr &local_addr (void) const; + + // = Set/get connection id. + void connection_id (CONNECTION_ID); + CONNECTION_ID connection_id (void) const; + + // = Set/get the current retry timeout delay. + void timeout (long); + long timeout (void); + + // = Set/get the maximum retry timeout delay. + void max_timeout (long); + long max_timeout (void) const; + + // = Set/get proxy role (i.e., 'S' for Supplier and 'C' for Consumer + // (necessary for error checking). + void connection_role (char); + char connection_role (void) const; + + // = Set/get the <Event_Channel> *. + void event_channel (Event_Channel *); + Event_Channel *event_channel (void) const; + + // = The total number of bytes sent/received on this proxy. + void total_bytes (size_t bytes); + // Increment count by <bytes>. + size_t total_bytes (void) const; + // Return the current byte count. + + virtual int handle_timeout (const ACE_Time_Value &, const void *arg); + // Perform timer-based Connection_Handler reconnection. + + virtual int handle_close (ACE_HANDLE = ACE_INVALID_HANDLE, + ACE_Reactor_Mask = ACE_Event_Handler::ALL_EVENTS_MASK); + // Perform Connection_Handler termination. + +protected: + ACE_INET_Addr remote_addr_; + // Address of peer. + + ACE_INET_Addr local_addr_; + // Address of us. + + CONNECTION_ID connection_id_; + // The assigned connection ID of this entry. + + size_t total_bytes_; + // The total number of bytes sent/received on this proxy. + + State state_; + // The current state of the proxy. + + long timeout_; + // Amount of time to wait between reconnection attempts. + + long max_timeout_; + // Maximum amount of time to wait between reconnection attempts. + + char connection_role_; + // Indicates which role the proxy plays ('S' == Supplier and 'C' == + // Consumer). + + Event_Channel *event_channel_; + // Reference to the <Event_Channel> that we use to forward all + // the events from Consumers and Suppliers. +}; + +class Connection_Handler_Factory +{ + // = TITLE + // Creates the appropriate type of <Connection_Handler>. + // + // = DESCRIPTION + // <Connection_Handler>s can include <Consumer_Handler>, + // <Supplier_Handler>, <Thr_Consumer_Handler>, or + // <Thr_Supplier_Handler>). +public: + Connection_Handler *make_connection_handler (const Connection_Config_Info &); + // Make the appropriate type of <Connection_Handler>, based on the + // <Connection_Config_Info> parameter. +}; + +#endif /* _CONNECTION_HANDLER */ |