#include #include #include #include #include #include #include #include static std::atomic g_running{true}; static void signal_handler(int /*signum*/) { g_running = false; } int main(int argc, char* argv[]) { uint16_t port = 8080; std::string mxl_domain = "/dev/shm/mxl"; for (int i = 1; i < argc; ++i) { std::string arg = argv[i]; if ((arg == "--port" || arg == "-p") && i + 1 < argc) { port = static_cast(std::stoi(argv[++i])); } else if ((arg == "--mxl-domain" || arg == "-d") && i + 1 < argc) { mxl_domain = argv[++i]; } else if (arg == "--help" || arg == "-h") { spdlog::info("Usage: dmf-studio-engine [options]"); spdlog::info(" --port, -p API server port (default: 8080)"); spdlog::info(" --mxl-domain, -d MXL domain path (default: /dev/shm/mxl)"); return 0; } } std::signal(SIGINT, signal_handler); std::signal(SIGTERM, signal_handler); spdlog::info("DMF Studio Engine starting on port {}", port); dmf_engine::Graph graph; dmf_engine::FlowManager flow_manager; dmf_engine::ProcessManager process_manager; dmf_engine::NodeControlClient control_client; dmf_engine::ApiServer api_server(port, graph, flow_manager, process_manager, control_client, mxl_domain); spdlog::info("DMF Studio Engine ready"); while (g_running) { api_server.poll(100); } spdlog::info("DMF Studio Engine shutting down"); process_manager.stop_all(graph); return 0; }