NAME
ACE_Cached_Connect_Strategy - A connection strategy which caches connections to peers (represented by SVC_HANDLER instances), thereby allowing subsequent re-use of unused, but available, connections.
SYNOPSIS
#include <ace/ACE_Strategies_T.h>
template<class SVC_HANDLER, ACE_PEER_CONNECTOR_1, class MUTEX>
class ACE_Cached_Connect_Strategy :
public ACE_Connection_Recycling_Strategy,
public ACE_Connect_Strategy<SVC_HANDLER, ACE_PEER_CONNECTOR_2>
{
public:
typedef ACE_Cached_Connect_Strategy<SVC_HANDLER, ACE_PEER_CONNECTOR_2, MUTEX> SELF;
ACE_Cached_Connect_Strategy (
ACE_Creation_Strategy<SVC_HANDLER> *cre_s = 0,
ACE_Concurrency_Strategy<SVC_HANDLER> *con_s = 0,
ACE_Recycling_Strategy<SVC_HANDLER> *rec_s = 0,
MUTEX *mutex = 0,
int delete_mutex = 0
);
virtual ~ACE_Cached_Connect_Strategy (void);
virtual int open (
ACE_Creation_Strategy<SVC_HANDLER> *cre_s,
ACE_Concurrency_Strategy<SVC_HANDLER> *con_s,
ACE_Recycling_Strategy<SVC_HANDLER> *rec_s
);
virtual int make_svc_handler (SVC_HANDLER *&sh);
virtual int activate_svc_handler (SVC_HANDLER *svc_handler);
virtual int assign_recycler (
SVC_HANDLER *svc_handler,
ACE_Connection_Recycling_Strategy *recycler,
const void *recycling_act
);
virtual int prepare_for_recycling (SVC_HANDLER *svc_handler);
virtual int connect_svc_handler (
SVC_HANDLER *&sh,
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 *&sh,
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 purge (const void *recycling_act);
virtual int cache (const void *recycling_act);
virtual int recycle_state (
const void *recycling_act,
ACE_Recyclable_State new_state
);
virtual ACE_Recyclable_State recycle_state (
const void *recycling_act
) const;
virtual int mark_as_closed (const void *recycling_act);
virtual int mark_as_closed_i (const void *recycling_act);
virtual int cleanup_hint (const void *recycling_act);
typedef ACE_Creation_Strategy<SVC_HANDLER> CREATION_STRATEGY;
typedef ACE_Concurrency_Strategy<SVC_HANDLER> CONCURRENCY_STRATEGY;
typedef ACE_Recycling_Strategy<SVC_HANDLER> RECYCLING_STRATEGY;
typedef ACE_Connect_Strategy<SVC_HANDLER, ACE_PEER_CONNECTOR_2> CONNECT_STRATEGY;
typedef ACE_Refcounted_Hash_Recyclable<ACE_PEER_CONNECTOR_ADDR> REFCOUNTED_HASH_RECYCLABLE_ADDRESS;
typedef ACE_Hash_Map_Manager<REFCOUNTED_HASH_RECYCLABLE_ADDRESS, SVC_HANDLER *, ACE_Null_Mutex> CONNECTION_MAP;
typedef ACE_Hash_Map_Iterator<REFCOUNTED_HASH_RECYCLABLE_ADDRESS, SVC_HANDLER *, ACE_Null_Mutex> CONNECTION_MAP_ITERATOR;
typedef ACE_Hash_Map_Entry<REFCOUNTED_HASH_RECYCLABLE_ADDRESS, SVC_HANDLER *> CONNECTION_MAP_ENTRY;
typedef ACE_Reverse_Lock<MUTEX> REVERSE_MUTEX;
virtual ACE_Creation_Strategy<SVC_HANDLER> *creation_strategy (
void
) const;
virtual ACE_Recycling_Strategy<SVC_HANDLER> *recycling_strategy (
void
) const;
virtual ACE_Concurrency_Strategy<SVC_HANDLER> *concurrency_strategy (
void
) const;
protected:
virtual int new_connection (
SVC_HANDLER *&sh,
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
);
int find (
ACE_Refcounted_Hash_Recyclable<ACE_PEER_CONNECTOR_ADDR> &search_addr,
ACE_Hash_Map_Entry<ACE_Refcounted_Hash_Recyclable<ACE_PEER_CONNECTOR_ADDR>, SVC_HANDLER *> *&entry
);
virtual int purge_i (const void *recycling_act);
virtual int cache_i (const void *recycling_act);
virtual int recycle_state_i (
const void *recycling_act,
ACE_Recyclable_State new_state
);
virtual ACE_Recyclable_State recycle_state_i (
const void *recycling_act
) const;
virtual int cleanup_hint_i (const void *recycling_act);
int check_hint_i (
SVC_HANDLER *&sh,
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,
ACE_Hash_Map_Entry<ACE_Refcounted_Hash_Recyclable<ACE_PEER_CONNECTOR_ADDR>, SVC_HANDLER *> *&entry,
int &found
);
int find_or_create_svc_handler_i (
SVC_HANDLER *&sh,
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,
ACE_Hash_Map_Entry<ACE_Refcounted_Hash_Recyclable<ACE_PEER_CONNECTOR_ADDR>, SVC_HANDLER *> *&entry,
int &found
);
virtual int connect_svc_handler_i (
SVC_HANDLER *&sh,
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,
int &found
);
CONNECTION_MAP connection_map_;
MUTEX *lock_;
int delete_lock_;
REVERSE_MUTEX *reverse_lock_;
CREATION_STRATEGY *creation_strategy_;
int delete_creation_strategy_;
CONCURRENCY_STRATEGY *concurrency_strategy_;
int delete_concurrency_strategy_;
RECYCLING_STRATEGY *recycling_strategy_;
int delete_recycling_strategy_;
};
DESCRIPTION
ACE_Cached_Connect_Strategy is intended to be used as a plug-in connection strategy for ACE_Strategy_Connector. It's added value is re-use of established connections.
Define some useful typedefs.
typedef ACE_Creation_Strategy<SVC_HANDLER> CREATION_STRATEGY;
typedef ACE_Concurrency_Strategy<SVC_HANDLER> CONCURRENCY_STRATEGY;
typedef ACE_Recycling_Strategy<SVC_HANDLER> RECYCLING_STRATEGY;
Super class
typedef ACE_Connect_Strategy<SVC_HANDLER, ACE_PEER_CONNECTOR_2> CONNECT_STRATEGY;
Typedefs for managing the map
typedef ACE_Refcounted_Hash_Recyclable<ACE_PEER_CONNECTOR_ADDR> REFCOUNTED_HASH_RECYCLABLE_ADDRESS;
typedef ACE_Hash_Map_Manager<REFCOUNTED_HASH_RECYCLABLE_ADDRESS, SVC_HANDLER *, ACE_Null_Mutex> CONNECTION_MAP;
typedef ACE_Hash_Map_Iterator<REFCOUNTED_HASH_RECYCLABLE_ADDRESS, SVC_HANDLER *, ACE_Null_Mutex> CONNECTION_MAP_ITERATOR;
typedef ACE_Hash_Map_Entry<REFCOUNTED_HASH_RECYCLABLE_ADDRESS, SVC_HANDLER *> CONNECTION_MAP_ENTRY;
typedef ACE_Reverse_Lock<MUTEX> REVERSE_MUTEX;
Strategy accessors
virtual ACE_Creation_Strategy<SVC_HANDLER> *creation_strategy (
void
) const;
virtual ACE_Recycling_Strategy<SVC_HANDLER> *recycling_strategy (
void
) const;
virtual ACE_Concurrency_Strategy<SVC_HANDLER> *concurrency_strategy (
void
) const;
Helpers
int check_hint_i (
SVC_HANDLER *&sh,
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,
ACE_Hash_Map_Entry<ACE_Refcounted_Hash_Recyclable<ACE_PEER_CONNECTOR_ADDR>, SVC_HANDLER *> *&entry,
int &found
);
int find_or_create_svc_handler_i (
SVC_HANDLER *&sh,
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,
ACE_Hash_Map_Entry<ACE_Refcounted_Hash_Recyclable<ACE_PEER_CONNECTOR_ADDR>, SVC_HANDLER *> *&entry,
int &found
);
virtual int connect_svc_handler_i (
SVC_HANDLER *&sh,
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,
int &found
);
CONNECTION_MAP connection_map_;
Table that maintains the cache of connected SVC_HANDLERs.
MUTEX *lock_;
Mutual exclusion for this object.
int delete_lock_;
Mutual exclusion for this object.
REVERSE_MUTEX *reverse_lock_;
Reverse lock.
Strategy objects.
CREATION_STRATEGY *creation_strategy_;
Creation strategy for an Connector.
int delete_creation_strategy_;
1 if Connector created the creation strategy and thus should delete it, else 0.
CONCURRENCY_STRATEGY *concurrency_strategy_;
Concurrency strategy for an Connector.
int delete_concurrency_strategy_;
1 if Connector created the concurrency strategy and thus should delete it, else 0.
RECYCLING_STRATEGY *recycling_strategy_;
Recycling strategy for an Connector.
int delete_recycling_strategy_;
1 if Connector created the recycling strategy and thus should delete it, else 0.
AUTHOR
Doug Schmidt
LIBRARY
ace