#include <ace/Service_Config.h> class ACE_Service_Config : public ACE_Event_Handler {
public:
enum {MAX_SERVICES = ACE_DEFAULT_REACTOR_SIZE};
ACE_Service_Config ( int ignore_defaults = 0, size_t size = ACE_Service_Config::MAX_SERVICES, int signum = SIGHUP );
ACE_Service_Config (const char program_name[]);
static int open (const char program_name[]);
static int open (int argc, char *argv[]);
virtual ~ACE_Service_Config (void);
static int close (void);
static int close_svcs (void);
static int close_singletons (void);
static int run_reactor_event_loop (void);
static int run_reactor_event_loop (ACE_Time_Value &tv);
static int end_reactor_event_loop (void);
static sig_atomic_t reactor_event_loop_done (void);
static int run_proactor_event_loop (void);
static int run_proactor_event_loop (ACE_Time_Value &tv);
static int end_proactor_event_loop (void);
static sig_atomic_t proactor_event_loop_done (void);
static int run_reactorEx_event_loop (void);
static int run_reactorEx_event_loop (ACE_Time_Value &tv);
static int end_reactorEx_event_loop (void);
static sig_atomic_t reactorEx_event_loop_done (void);
static sig_atomic_t reconfig_occurred (void);
static void reconfig_occurred (sig_atomic_t);
static ACE_STATIC_SVCS *static_svcs (void);
static ACE_Reactor *reactor (void);
static ACE_Reactor *reactor (ACE_Reactor *);
static ACE_Proactor *proactor (size_t threads = 0);
static ACE_Proactor *proactor (ACE_Proactor *);
static ACE_ReactorEx *reactorEx (void);
static ACE_ReactorEx *reactorEx (ACE_ReactorEx *);
static ACE_Service_Repository *svc_rep (void);
static ACE_Service_Repository *svc_rep (ACE_Service_Repository *);
static ACE_Thread_Manager *thr_mgr (void);
static ACE_Thread_Manager *thr_mgr (ACE_Thread_Manager *);
static ACE_Allocator *allocator (void);
static ACE_Allocator *allocator (ACE_Allocator *);
static int initialize ( const ACE_Service_Record *, char parameters[] );
static int initialize (const char svc_name[], char parameters[]);
static int resume (const char svc_name[]);
static int suspend (const char svc_name[]);
static int remove (const char svc_name[]);
void dump (void) const;
ACE_ALLOC_HOOK_DECLARE;
protected:
static int process_directives (void);
static void parse_args (int, char *[]);
static void reconfigure (void);
static int start_daemon (void);
static int load_defaults (void);
virtual int handle_signal ( int signum, siginfo_t * = 0, ucontext_t * = 0 );
private:
static ACE_Service_Repository *svc_rep_;
static int delete_svc_rep_;
static ACE_Thread_Manager *thr_mgr_;
static int delete_thr_mgr_;
static ACE_Allocator *allocator_;
static int delete_allocator_;
static ACE_Proactor *proactor_;
static int delete_proactor_;
static ACE_ReactorEx *reactorEx_;
static int delete_reactorEx_;
static ACE_Reactor *reactor_;
static int delete_reactor_;
static const char *service_config_file_;
static const char *logger_key_;
static sig_atomic_t end_reactor_event_loop_;
static sig_atomic_t end_proactor_event_loop_;
static sig_atomic_t end_reactorEx_event_loop_;
static sig_atomic_t reconfig_occurred_;
static char debug_;
static char be_a_daemon_;
static char no_defaults_;
static int signum_;
};
ACE_Event_Handler
so that it can
be used as a signal handler.
ACE_Service_Config (
int ignore_defaults = 0,
size_t size = ACE_Service_Config::MAX_SERVICES,
int signum = SIGHUP
);
ACE_Service_Config (const char program_name[]);
static int open (const char program_name[]);
static int open (int argc, char *argv[]);
virtual ~ACE_Service_Config (void);
static int close (void);
close_svcs
and close_singletons
.
static int close_svcs (void);
Service_Repository
, then delete the
Service_Repository
itself.
static int close_singletons (void);
Reactor
,
Proactor
, ReactorEx
, Thread_Manager
, and Allocator
).
static int run_reactor_event_loop (void);
ACE_Reactor::handle_events
method
returns -1 or the end_reactor_event_loop
method is invoked.
static int run_reactor_event_loop (ACE_Time_Value &tv);
ACE_Reactor::handle_events
method
returns -1, the end_reactor_event_loop
method is invoked, or the
ACE_Time_Value
expires.
static int end_reactor_event_loop (void);
ACE_Service_Config
to terminate its event loop and
notifies the ACE_Service_Config::reactor
so that it can wake up
and close down gracefully.
static sig_atomic_t reactor_event_loop_done (void);
static int run_proactor_event_loop (void);
ACE_Proactor::handle_events
method returns -1 or the end_proactor_event_loop
method
is invoked.
static int run_proactor_event_loop (ACE_Time_Value &tv);
ACE_Proactor::handle_events
method returns -1, the end_proactor_event_loop
method
is invoked, or the ACE_Time_Value
expires.
static int end_proactor_event_loop (void);
ACE_Service_Config
to terminate its event loop.
static sig_atomic_t proactor_event_loop_done (void);
static int run_reactorEx_event_loop (void);
ACE_ReactorEx::handle_events
method returns -1 or the end_reactorEx_event_loop
method
is invoked.
static int run_reactorEx_event_loop (ACE_Time_Value &tv);
ACE_ReactorEx::handle_events
method returns -1, the end_reactorEx_event_loop
method
is invoked, or the ACE_Time_Value
expires.
static int end_reactorEx_event_loop (void);
ACE_Service_Config
to terminate its event loop.
static sig_atomic_t reactorEx_event_loop_done (void);
static sig_atomic_t reconfig_occurred (void);
static void reconfig_occurred (sig_atomic_t);
static ACE_STATIC_SVCS *static_svcs (void);
static ACE_Reactor *reactor (void);
ACE_Reactor
.
static ACE_Reactor *reactor (ACE_Reactor *);
ACE_Reactor
and return existing
pointer.
static ACE_Proactor *proactor (size_t threads = 0);
ACE_Proactor
. threads
should
be part of another method. It's only here because I'm just a
grad student and not in charge. No, I'm not bitter about this.
static ACE_Proactor *proactor (ACE_Proactor *);
ACE_Proactor
and return existing
pointer.
static ACE_ReactorEx *reactorEx (void);
ACE_ReactorEx
.
static ACE_ReactorEx *reactorEx (ACE_ReactorEx *);
ACE_ReactorEx
and return existing
pointer.
static ACE_Service_Repository *svc_rep (void);
ACE_Service_Repository
.
static ACE_Service_Repository *svc_rep (ACE_Service_Repository *);
ACE_Service_Repository
and return
existing pointer.
static ACE_Thread_Manager *thr_mgr (void);
ACE_Thread_Manager
.
static ACE_Thread_Manager *thr_mgr (ACE_Thread_Manager *);
ACE_Thread_Manager
and return
existing pointer.
static ACE_Allocator *allocator (void);
ACE_Allocator
.
static ACE_Allocator *allocator (ACE_Allocator *);
ACE_Allocator
and return existing
pointer.
static int initialize (const ACE_Service_Record *, char parameters[]);
static int initialize (const char svc_name[], char parameters[]);
svc_name
service.
static int resume (const char svc_name[]);
svc_name
that was previously suspended or has not yet
been resumed (e.g., a static service).
static int suspend (const char svc_name[]);
svc_name
. Note that this will not unlink the service
from the daemon if it was dynamically linked, it will mark it
as being suspended in the Service Repository and call the
suspend() member function on the appropriate ACE_Service_Object.
A service can be resumed later on by calling the RESUME()
member function...
static int remove (const char svc_name[]);
svc_name
from the daemon by removing it
from the ACE_Reactor, and unlinking it if necessary.
void dump (void) const;
ACE_ALLOC_HOOK_DECLARE;
static char debug_;
static char be_a_daemon_;
static char no_defaults_;
static int signum_;