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

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

#include <ConsoleApplication.hpp>

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.
 
 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 and delegates to signal handler.
 
static void handle_signal (const char *signal_name, int exit_code)
 Logs and processes a POSIX signal by initiating application cleanup.
 

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. Supports signal handling for both Windows and POSIX systems.

Definition at line 18 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 34 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 40 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 133 of file ConsoleApplication.hpp.

◆ get_instance()

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

Retrieves the singleton instance of the application.

Returns
A reference to the ConsoleApplication instance.

Definition at line 23 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 167 of file ConsoleApplication.hpp.

◆ handle_signal()

static void consolix::ConsoleApplication::handle_signal ( const char * signal_name,
int exit_code )
inlinestaticprivate

Logs and processes a POSIX signal by initiating application cleanup.

Parameters
signal_nameName of the POSIX signal.
exit_codePOSIX signal code.

Definition at line 275 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 46 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 63 of file ConsoleApplication.hpp.

◆ lifecycle_loop() [1/2]

void consolix::ConsoleApplication::lifecycle_loop ( )
inlineprivate

The main lifecycle loop.

Definition at line 191 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 178 of file ConsoleApplication.hpp.

◆ on_exit_handler()

static void consolix::ConsoleApplication::on_exit_handler ( )
inlinestaticprivate

Called upon normal program termination.

Definition at line 203 of file ConsoleApplication.hpp.

◆ operator=() [1/2]

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

◆ operator=() [2/2]

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

◆ run() [1/2]

void consolix::ConsoleApplication::run ( )
inline

Runs the application with the registered components.

Definition at line 81 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 93 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 120 of file ConsoleApplication.hpp.

◆ shutdown()

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

Definition at line 108 of file ConsoleApplication.hpp.

◆ signal_handler()

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

Handles a POSIX signal and delegates to signal handler.

Parameters
exit_codePOSIX signal code.

Definition at line 258 of file ConsoleApplication.hpp.

◆ stop()

void consolix::ConsoleApplication::stop ( )
inline

Stops the application's main loop.

Definition at line 102 of file ConsoleApplication.hpp.

Member Data Documentation

◆ m_cleanup

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

Definition at line 117 of file ConsoleApplication.hpp.

◆ m_init

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

Definition at line 114 of file ConsoleApplication.hpp.

◆ m_manager

AppComponentManager consolix::ConsoleApplication::m_manager
private

Definition at line 113 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 115 of file ConsoleApplication.hpp.

◆ m_stopping

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

Definition at line 116 of file ConsoleApplication.hpp.


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