Consolix
Loading...
Searching...
No Matches
consolix::ConsoleApplication Class Reference

Singleton class to manage the lifecycle of a console application. More...

#include <ConsoleApplication.hpp>

Classes

class  PosixTerminationSignalMaskGuard

Public Member Functions

template<typename Component, typename... Args>
std::shared_ptr< Component > add (Args &&... args)
 Adds a new component to the application.
void add (std::shared_ptr< IAppComponent > component)
 Adds an existing component to the application.
void init ()
 Initializes the application and its components. This method initializes all components in the manager and ensures readiness.
template<typename InitAction>
void init (InitAction init_action)
 Initializes the application with a custom action.
void run ()
 Runs the application with the registered components.
template<typename IterationAction>
void run (IterationAction iteration_action)
 Runs the application with a custom loop action.
void stop ()
 Stops the application's main loop.
void shutdown (int signal)

Static Public Member Functions

static ConsoleApplicationget_instance ()
 Retrieves the singleton instance of the application.

Private Member Functions

void setup_signal_handlers ()
 Sets up signal handlers for graceful application termination.
void cleanup (int exit_code, bool wait_for_press=false)
 Cleans up the application and shuts down all components.
void handle_fatal_exception (const std::exception &e)
 Handles fatal exceptions by logging the error and terminating the application.
template<typename IterationAction>
void lifecycle_loop (IterationAction iteration_action)
 The main lifecycle loop with a custom action.
void lifecycle_loop ()
 The main lifecycle loop.
bool stop_requested ()
 Checks whether a POSIX signal requested shutdown and synchronizes the runtime state.
int resolve_stop_exit_code (int fallback_exit_code) const
 Resolves the exit code for the active stop request.
void cleanup_if_stopping ()
 Executes cleanup immediately if a stop request is already pending.
 ConsoleApplication ()=default
 ~ConsoleApplication ()=default
 ConsoleApplication (const ConsoleApplication &)=delete
ConsoleApplicationoperator= (const ConsoleApplication &)=delete
 ConsoleApplication (ConsoleApplication &&)=delete
ConsoleApplicationoperator= (ConsoleApplication &&)=delete

Static Private Member Functions

static void on_exit_handler ()
 Called upon normal program termination.
static void signal_handler (int exit_code)
 Handles a POSIX signal by recording a deferred shutdown request.
static void reset_signal_state ()
 Resets POSIX signal state before installing handlers.
static volatile std::sig_atomic_t & pending_signal_code ()
 Storage for the last requested POSIX shutdown signal.
static volatile std::sig_atomic_t & signal_stop_requested ()
 Storage for the POSIX stop-request flag.

Private Attributes

AppComponentManager m_manager
std::atomic< bool > m_init {false}
std::atomic< bool > m_running {false}
 Flag indicating whether the loop is running.
std::atomic< bool > m_stopping {false}
std::atomic< bool > m_cleanup {false}

Detailed Description

Singleton class to manage the lifecycle of a console application.

Provides functionality to initialize, execute, and gracefully shut down components in a structured lifecycle. On POSIX systems, signal handlers only request shutdown, and the actual component cleanup runs later in the normal execution path.

Definition at line 25 of file ConsoleApplication.hpp.

Constructor & Destructor Documentation

◆ ConsoleApplication() [1/3]

consolix::ConsoleApplication::ConsoleApplication ( )
privatedefault

◆ ~ConsoleApplication()

consolix::ConsoleApplication::~ConsoleApplication ( )
privatedefault

◆ ConsoleApplication() [2/3]

consolix::ConsoleApplication::ConsoleApplication ( const ConsoleApplication & )
privatedelete

◆ ConsoleApplication() [3/3]

consolix::ConsoleApplication::ConsoleApplication ( ConsoleApplication && )
privatedelete

Member Function Documentation

◆ add() [1/2]

template<typename Component, typename... Args>
std::shared_ptr< Component > consolix::ConsoleApplication::add ( Args &&... args)
inline

Adds a new component to the application.

Template Parameters
ComponentThe type of the component to create.
ArgsThe argument types for the component's constructor.
Parameters
argsArguments for constructing the component.
Returns
A std::shared_ptr to the newly added component.

Definition at line 41 of file ConsoleApplication.hpp.

◆ add() [2/2]

void consolix::ConsoleApplication::add ( std::shared_ptr< IAppComponent > component)
inline

Adds an existing component to the application.

Parameters
componentA shared pointer to the component.

Definition at line 47 of file ConsoleApplication.hpp.

◆ cleanup()

void consolix::ConsoleApplication::cleanup ( int exit_code,
bool wait_for_press = false )
inlineprivate

Cleans up the application and shuts down all components.

Parameters
exit_codeExit code indicating the reason for cleanup.
wait_for_pressFlag indicating if the program should wait for a key press before exiting.

Definition at line 144 of file ConsoleApplication.hpp.

◆ cleanup_if_stopping()

void consolix::ConsoleApplication::cleanup_if_stopping ( )
inlineprivate

Executes cleanup immediately if a stop request is already pending.

Definition at line 328 of file ConsoleApplication.hpp.

◆ get_instance()

ConsoleApplication & consolix::ConsoleApplication::get_instance ( )
inlinestatic

Retrieves the singleton instance of the application.

Returns
A reference to the ConsoleApplication instance.

Definition at line 30 of file ConsoleApplication.hpp.

◆ handle_fatal_exception()

void consolix::ConsoleApplication::handle_fatal_exception ( const std::exception & e)
inlineprivate

Handles fatal exceptions by logging the error and terminating the application.

Parameters
eThe exception that caused the fatal error.

Definition at line 184 of file ConsoleApplication.hpp.

◆ init() [1/2]

void consolix::ConsoleApplication::init ( )
inline

Initializes the application and its components. This method initializes all components in the manager and ensures readiness.

Definition at line 53 of file ConsoleApplication.hpp.

◆ init() [2/2]

template<typename InitAction>
void consolix::ConsoleApplication::init ( InitAction init_action)
inline

Initializes the application with a custom action.

Template Parameters
InitActionA callable type for the custom initialization action.
Parameters
init_actionThe custom action to perform during initialization.

Definition at line 68 of file ConsoleApplication.hpp.

◆ lifecycle_loop() [1/2]

void consolix::ConsoleApplication::lifecycle_loop ( )
inlineprivate

The main lifecycle loop.

Definition at line 208 of file ConsoleApplication.hpp.

◆ lifecycle_loop() [2/2]

template<typename IterationAction>
void consolix::ConsoleApplication::lifecycle_loop ( IterationAction iteration_action)
inlineprivate

The main lifecycle loop with a custom action.

Template Parameters
IterationActionA callable executed within the loop.
Parameters
iteration_actionThe action to execute in each iteration.

Definition at line 195 of file ConsoleApplication.hpp.

◆ on_exit_handler()

void consolix::ConsoleApplication::on_exit_handler ( )
inlinestaticprivate

Called upon normal program termination.

Definition at line 220 of file ConsoleApplication.hpp.

◆ operator=() [1/2]

ConsoleApplication & consolix::ConsoleApplication::operator= ( ConsoleApplication && )
privatedelete

◆ operator=() [2/2]

ConsoleApplication & consolix::ConsoleApplication::operator= ( const ConsoleApplication & )
privatedelete

◆ pending_signal_code()

volatile std::sig_atomic_t & consolix::ConsoleApplication::pending_signal_code ( )
inlinestaticprivate

Storage for the last requested POSIX shutdown signal.

Definition at line 335 of file ConsoleApplication.hpp.

◆ reset_signal_state()

void consolix::ConsoleApplication::reset_signal_state ( )
inlinestaticprivate

Resets POSIX signal state before installing handlers.

Definition at line 305 of file ConsoleApplication.hpp.

◆ resolve_stop_exit_code()

int consolix::ConsoleApplication::resolve_stop_exit_code ( int fallback_exit_code) const
inlineprivate

Resolves the exit code for the active stop request.

Definition at line 319 of file ConsoleApplication.hpp.

◆ run() [1/2]

void consolix::ConsoleApplication::run ( )
inline

Runs the application with the registered components.

Definition at line 82 of file ConsoleApplication.hpp.

◆ run() [2/2]

template<typename IterationAction>
void consolix::ConsoleApplication::run ( IterationAction iteration_action)
inline

Runs the application with a custom loop action.

Template Parameters
IterationActionA callable type executed within the main loop.
Parameters
iteration_actionThe custom action to perform in each loop iteration.

Definition at line 94 of file ConsoleApplication.hpp.

◆ setup_signal_handlers()

void consolix::ConsoleApplication::setup_signal_handlers ( )
inlineprivate

Sets up signal handlers for graceful application termination.

Definition at line 122 of file ConsoleApplication.hpp.

◆ shutdown()

void consolix::ConsoleApplication::shutdown ( int signal)
inline

Definition at line 109 of file ConsoleApplication.hpp.

◆ signal_handler()

void consolix::ConsoleApplication::signal_handler ( int exit_code)
inlinestaticprivate

Handles a POSIX signal by recording a deferred shutdown request.

Parameters
exit_codePOSIX signal code.

Definition at line 299 of file ConsoleApplication.hpp.

◆ signal_stop_requested()

volatile std::sig_atomic_t & consolix::ConsoleApplication::signal_stop_requested ( )
inlinestaticprivate

Storage for the POSIX stop-request flag.

Definition at line 341 of file ConsoleApplication.hpp.

◆ stop()

void consolix::ConsoleApplication::stop ( )
inline

Stops the application's main loop.

Definition at line 103 of file ConsoleApplication.hpp.

◆ stop_requested()

bool consolix::ConsoleApplication::stop_requested ( )
inlineprivate

Checks whether a POSIX signal requested shutdown and synchronizes the runtime state.

Definition at line 311 of file ConsoleApplication.hpp.

Member Data Documentation

◆ m_cleanup

std::atomic<bool> consolix::ConsoleApplication::m_cleanup {false}
private

Definition at line 119 of file ConsoleApplication.hpp.

◆ m_init

std::atomic<bool> consolix::ConsoleApplication::m_init {false}
private

Definition at line 116 of file ConsoleApplication.hpp.

◆ m_manager

AppComponentManager consolix::ConsoleApplication::m_manager
private

Definition at line 115 of file ConsoleApplication.hpp.

◆ m_running

std::atomic<bool> consolix::ConsoleApplication::m_running {false}
private

Flag indicating whether the loop is running.

Definition at line 117 of file ConsoleApplication.hpp.

◆ m_stopping

std::atomic<bool> consolix::ConsoleApplication::m_stopping {false}
private

Definition at line 118 of file ConsoleApplication.hpp.


The documentation for this class was generated from the following file: