26 std::cout <<
"\nReceived signal " << signal <<
", shutting down...\n";
60template<
typename ModuleType,
typename Registry>
68 std::cout <<
"Starting " << config.
name <<
" (system_id="
69 <<
static_cast<int>(config.
system_id()) <<
", instance_id="
72 ModuleType module(config);
76 std::cout << config.
name <<
" running (press Ctrl+C to stop)...\n";
84 std::cout <<
"Stopping " << config.
name <<
"...\n";
87 std::cout << config.
name <<
" stopped successfully\n";
90 }
catch (
const std::exception& e) {
91 std::cerr <<
"ERROR: " << e.what() <<
"\n";
94 std::cerr <<
"ERROR: Unknown exception\n";
113template<
typename ModuleType,
typename Registry>
119 std::cerr <<
"ERROR: Configuration file required\n";
120 std::cerr <<
"Usage: " << argv[0] <<
" <config.json>\n";
124 std::string filename = argv[1];
125 if (!filename.ends_with(
".json")) {
126 std::cerr <<
"ERROR: Only JSON config files supported (got: " << filename <<
")\n";
127 std::cerr <<
"Usage: " << argv[0] <<
" <config.json>\n";
131 config = rfl::json::load<ModuleConfig>(filename).value();
134 return module_main<ModuleType, Registry>(config);
136 }
catch (
const std::exception& e) {
137 std::cerr <<
"Fatal error: " << e.what() <<
"\n";
166#define COMMRAT_MODULE_MAIN(ModuleType, Registry) \
167 int main(int argc, char** argv) { \
168 return commrat::module_main<ModuleType, Registry>(argc, argv); \
static void sleep(std::chrono::duration< Rep, Period > duration) noexcept
Sleep for specified duration.
Main CommRaT header - include this to get everything you need.
CommRaT - Modern C++ Real-Time Communication Framework.
std::atomic< bool > g_shutdown_requested
void signal_handler(int signal)
Signal handler for graceful shutdown.
std::chrono::milliseconds Milliseconds
int module_main(const ModuleConfig &config)
Main entry point for standalone module binaries.
uint8_t system_id() const
Get system_id - NoOutput or SimpleOutput only.
uint8_t instance_id() const
Get instance_id - NoOutput or SimpleOutput only.
Unified threading and synchronization abstractions for CommRaT.