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: typedef ACE_PEER_CONNECTOR_ADDR ACE_PEER_ADDR_TYPEDEF; ACE_Connector ( ACE_Reactor *r = ACE_Reactor::instance (), int flags = 0 ); virtual int open ( ACE_Reactor *r = ACE_Reactor::instance (), int flags = 0 ); virtual ~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_ANY, int reuse_addr = 0, int flags = O_RDWR, int perms = 0 ); virtual int connect ( SVC_HANDLER *&svc_handler_hint, 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_ANY, int reuse_addr = 0, int flags = O_RDWR, int perms = 0 ); virtual int connect_n ( size_t n, SVC_HANDLER *svc_handlers[], ACE_PEER_CONNECTOR_ADDR remote_addrs[], ASYS_TCHAR *failed_svc_handlers = 0, const ACE_Synch_Options &synch_options = ACE_Synch_Options::defaults ); virtual int cancel (SVC_HANDLER *svc_handler); virtual int close (void); 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_SYNCH_RW_MUTEX> MAP_MANAGER; typedef ACE_Map_Iterator<ACE_HANDLE, ACE_Svc_Tuple<SVC_HANDLER> *, ACE_SYNCH_RW_MUTEX> MAP_ITERATOR; typedef ACE_Map_Entry<ACE_HANDLE, ACE_Svc_Tuple<SVC_HANDLER> *> MAP_ENTRY; virtual int make_svc_handler (SVC_HANDLER *&sh); virtual int connect_svc_handler ( SVC_HANDLER *&svc_handler, const ACE_PEER_CONNECTOR_ADDR &remote_addr, ACE_Time_Value *timeout, const ACE_PEER_CONNECTOR_ADDR &local_addr, int reuse_addr, int flags, int perms ); virtual int connect_svc_handler ( SVC_HANDLER *&svc_handler, SVC_HANDLER *&sh_copy, const ACE_PEER_CONNECTOR_ADDR &remote_addr, ACE_Time_Value *timeout, 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 handle_exception (ACE_HANDLE fd = ACE_INVALID_HANDLE); virtual int init (int argc, ASYS_TCHAR *argv[]); virtual int fini (void); virtual int info (ASYS_TCHAR **, size_t) const; virtual int handle_close ( ACE_HANDLE = ACE_INVALID_HANDLE, ACE_Reactor_Mask = ACE_Event_Handler::ALL_EVENTS_MASK ); 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 *&); virtual int connect_i ( SVC_HANDLER *&svc_handler, SVC_HANDLER **sh_copy, 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 ); MAP_MANAGER handler_map_; private: ACE_PEER_CONNECTOR connector_; char closing_; int flags_; };

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.

typedef ACE_TYPENAME ACE_PEER_CONNECTOR_ADDR PEER_ADDR;
typedef ACE_PEER_CONNECTOR_ADDR ACE_PEER_ADDR_TYPEDEF;

ACE_Connector (
    ACE_Reactor *r = ACE_Reactor::instance (),
    int flags = 0
    );

virtual int open (
    ACE_Reactor *r = ACE_Reactor::instance (),
    int flags = 0
    );

virtual ~ACE_Connector (void);

Connection establishment methods.

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_ANY,
    int reuse_addr = 0,
    int flags = O_RDWR,
    int perms = 0
    );

virtual int connect (
    SVC_HANDLER *&svc_handler_hint,
    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_ANY,
    int reuse_addr = 0,
    int flags = O_RDWR,
    int perms = 0
    );

virtual int connect_n (
    size_t n,
    SVC_HANDLER *svc_handlers[],
    ACE_PEER_CONNECTOR_ADDR remote_addrs[],
    ASYS_TCHAR *failed_svc_handlers = 0,
    const ACE_Synch_Options &synch_options = ACE_Synch_Options::defaults
    );

virtual int cancel (SVC_HANDLER *svc_handler);

virtual int close (void);

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_SYNCH_RW_MUTEX> MAP_MANAGER;
    

    typedef ACE_Map_Iterator<ACE_HANDLE, ACE_Svc_Tuple<SVC_HANDLER> *, ACE_SYNCH_RW_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

creating, connecting, and activating SVC_HANDLER's, respectively.
virtual int make_svc_handler (SVC_HANDLER *&sh);

virtual int connect_svc_handler (
    SVC_HANDLER *&svc_handler,
    const ACE_PEER_CONNECTOR_ADDR &remote_addr,
    ACE_Time_Value *timeout,
    const ACE_PEER_CONNECTOR_ADDR &local_addr,
    int reuse_addr,
    int flags,
    int perms
    );

virtual int connect_svc_handler (
    SVC_HANDLER *&svc_handler,
    SVC_HANDLER *&sh_copy,
    const ACE_PEER_CONNECTOR_ADDR &remote_addr,
    ACE_Time_Value *timeout,
    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 handle_exception (ACE_HANDLE fd = ACE_INVALID_HANDLE);

Dynamic linking hooks.

virtual int init (int argc, ASYS_TCHAR *argv[]);

virtual int fini (void);

virtual int info (ASYS_TCHAR **, size_t) const;

Demultiplexing hooks.

virtual int handle_close (
    ACE_HANDLE = ACE_INVALID_HANDLE,
    ACE_Reactor_Mask = ACE_Event_Handler::ALL_EVENTS_MASK
    );

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 *&);

virtual int connect_i (
    SVC_HANDLER *&svc_handler,
    SVC_HANDLER **sh_copy,
    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
    );

MAP_MANAGER handler_map_;

AUTHOR

Doug Schmidt

LIBRARY

ace