NAME

ACE_Connector - Generic factory for actively connecting clients and creating service handlers (SVC_HANDLERs).

SYNOPSIS


#include <ace/Connector.h>


template<class SVC_HANDLER, ACE_PEER_CONNECTOR_1>
class ACE_Connector : public ACE_Service_Object
{
  public:
    ACE_Connector (ACE_Reactor *r = ACE_Service_Config::reactor ());
    virtual int open (
        ACE_Reactor *r = ACE_Service_Config::reactor ()
        );
    ~ACE_Connector (void);
    virtual int connect (
        SVC_HANDLER *svc_handler,
        const ACE_PEER_CONNECTOR_ADDR &remote_addr,
        const ACE_Synch_Options &synch_options = ACE_Synch_Options::defaults,
        const ACE_PEER_CONNECTOR_ADDR &local_addr = (ACE_PEER_CONNECTOR_ADDR &) ACE_PEER_CONNECTOR_ADDR::sap_any,
        int reuse_addr = 0,
        int flags = O_RDWR,
        int perms = 0
        );
    virtual int cancel (SVC_HANDLER *svc_handler);
    ACE_PEER_CONNECTOR &connector (void) const;
    ACE_Reactor *reactor (void) const;
    void reactor (ACE_Reactor *);
    void dump (void) const;
    ACE_ALLOC_HOOK_DECLARE;
  protected:
    typedef ACE_Svc_Tuple<SVC_HANDLER> AST;
        typedef ACE_Map_Manager<ACE_HANDLE, ACE_Svc_Tuple<SVC_HANDLER> *, ACE_RW_Mutex> MAP_MANAGER;
        
        typedef ACE_Map_Iterator<ACE_HANDLE, ACE_Svc_Tuple<SVC_HANDLER> *, ACE_RW_Mutex> MAP_ITERATOR;
        
        typedef ACE_Map_Entry<ACE_HANDLE, ACE_Svc_Tuple<SVC_HANDLER> *> MAP_ENTRY;
        
        typedef ACE_Map_Manager<ACE_HANDLE, ACE_Svc_Tuple<SVC_HANDLER> *, ACE_Null_Mutex> MAP_MANAGER;
        
        typedef ACE_Map_Iterator<ACE_HANDLE, ACE_Svc_Tuple<SVC_HANDLER> *, ACE_Null_Mutex> MAP_ITERATOR;
        
        typedef ACE_Map_Entry<ACE_HANDLE, ACE_Svc_Tuple<SVC_HANDLER> *> MAP_ENTRY;
        
    virtual int connect_svc_handler (
        SVC_HANDLER *svc_handler,
        const ACE_PEER_CONNECTOR_ADDR &remote_addr,
        const ACE_Synch_Options &synch_options,
        const ACE_PEER_CONNECTOR_ADDR &local_addr,
        int reuse_addr,
        int flags,
        int perms
        );
    virtual int activate_svc_handler (SVC_HANDLER *svc_handler);
    virtual int handle_input (ACE_HANDLE);
    virtual int handle_output (ACE_HANDLE);
    virtual int init (int argc, char *argv[]);
    virtual int fini (void);
    virtual int info (char **, size_t) const;
    virtual int handle_close (
        ACE_HANDLE = ACE_INVALID_HANDLE,
        ACE_Reactor_Mask = ACE_Event_Handler::RWE_MASK
        );
    virtual ACE_HANDLE get_handle (void) const;
    virtual int handle_timeout (
        const ACE_Time_Value &tv,
        const void *arg
        );
    virtual int suspend (void);
    virtual int resume (void);
    int create_AST (SVC_HANDLER *, const ACE_Synch_Options &);
    int cleanup_AST (ACE_HANDLE, AST *&);
    MAP_MANAGER handler_map_;
  private:
    ACE_PEER_CONNECTOR connector_;
    ACE_Reactor *reactor_;
};

DESCRIPTION

Implements the strategy for actively establishing connections with clients. An ACE_Connector is parameterized by concrete types that conform to the interfaces of PEER_CONNECTOR and SVC_HANDLER. The PEER_CONNECTOR is instantiated with a transport mechanism that passively establishes connections. The SVC_HANDLER is instantiated with a concrete type that performs the application-specific service. An ACE_Connector inherits from ACE_Service_Object, which in turn inherits from ACE_Event_Handler. This enables the ACE_Reactor to dispatch the ACE_Connector's handle_output method when connections complete asynchronously. The handle_output method performs the connector's active connection establishment and service activation strategy.

Initialization and termination methods.

ACE_Connector (ACE_Reactor *r = ACE_Service_Config::reactor ());
virtual int open (ACE_Reactor *r = ACE_Service_Config::reactor ());
~ACE_Connector (void);

Connection establishment method

virtual int connect (
    SVC_HANDLER *svc_handler,
    const ACE_PEER_CONNECTOR_ADDR &remote_addr,
    const ACE_Synch_Options &synch_options = ACE_Synch_Options::defaults,
    const ACE_PEER_CONNECTOR_ADDR &local_addr = (ACE_PEER_CONNECTOR_ADDR &) ACE_PEER_CONNECTOR_ADDR::sap_any,
    int reuse_addr = 0,
    int flags = O_RDWR,
    int perms = 0
    );
virtual int cancel (SVC_HANDLER *svc_handler);
ACE_PEER_CONNECTOR &connector (void) const;
ACE_Reactor *reactor (void) const;
void reactor (ACE_Reactor *);
void dump (void) const;
ACE_ALLOC_HOOK_DECLARE;

Helpful typedefs.

typedef ACE_Svc_Tuple<SVC_HANDLER> AST;
    typedef ACE_Map_Manager<ACE_HANDLE, ACE_Svc_Tuple<SVC_HANDLER> *, ACE_RW_Mutex> MAP_MANAGER;
    
    typedef ACE_Map_Iterator<ACE_HANDLE, ACE_Svc_Tuple<SVC_HANDLER> *, ACE_RW_Mutex> MAP_ITERATOR;
    
    typedef ACE_Map_Entry<ACE_HANDLE, ACE_Svc_Tuple<SVC_HANDLER> *> MAP_ENTRY;
    
    typedef ACE_Map_Manager<ACE_HANDLE, ACE_Svc_Tuple<SVC_HANDLER> *, ACE_Null_Mutex> MAP_MANAGER;
    
    typedef ACE_Map_Iterator<ACE_HANDLE, ACE_Svc_Tuple<SVC_HANDLER> *, ACE_Null_Mutex> MAP_ITERATOR;
    
    typedef ACE_Map_Entry<ACE_HANDLE, ACE_Svc_Tuple<SVC_HANDLER> *> MAP_ENTRY;
    

The following two methods define the Connector's strategies for

connecting and activating SVC_HANDLER's, respectively.
virtual int connect_svc_handler (
    SVC_HANDLER *svc_handler,
    const ACE_PEER_CONNECTOR_ADDR &remote_addr,
    const ACE_Synch_Options &synch_options,
    const ACE_PEER_CONNECTOR_ADDR &local_addr,
    int reuse_addr,
    int flags,
    int perms
    );
virtual int activate_svc_handler (SVC_HANDLER *svc_handler);
virtual int handle_input (ACE_HANDLE);
virtual int handle_output (ACE_HANDLE);

Dynamic linking hooks.

virtual int init (int argc, char *argv[]);
virtual int fini (void);
virtual int info (char **, size_t) const;

Demultiplexing hooks.

virtual int handle_close (
    ACE_HANDLE = ACE_INVALID_HANDLE,
    ACE_Reactor_Mask = ACE_Event_Handler::RWE_MASK
    );
virtual ACE_HANDLE get_handle (void) const;
virtual int handle_timeout (
    const ACE_Time_Value &tv,
    const void *arg
    );

Service management hooks.

virtual int suspend (void);
virtual int resume (void);
int create_AST (SVC_HANDLER *, const ACE_Synch_Options &);
int cleanup_AST (ACE_HANDLE, AST *&);
MAP_MANAGER handler_map_;

AUTHOR

Doug Schmidt

LIBRARY

ace