5b5ffa1308
- CMake build system with vcpkg dependency management - libdmf-node: Node interface, port definitions, WebSocket control server, node runner with MXL lifecycle management - libdmf-engine: Graph model (nodes/edges CRUD, serialization), FlowManager (UUID + V210 NMOS flow definitions), ProcessManager (fork/exec node processes), ApiServer (REST API for graph control) - Passthrough node: reads V210 grains from MXL, copies, writes to MXL - Unit tests for Graph and FlowManager (6 cases, 21 assertions) - MXL SDK as git submodule (symlinked from extern/mxl)
40 lines
833 B
C++
40 lines
833 B
C++
#pragma once
|
|
|
|
#include <dmf-node/node.hpp>
|
|
#include <dmf-node/control_server.hpp>
|
|
|
|
#include <mxl/mxl.h>
|
|
|
|
#include <atomic>
|
|
#include <memory>
|
|
#include <string>
|
|
|
|
namespace dmf_node {
|
|
|
|
class NodeRunner {
|
|
public:
|
|
template <typename NodeType>
|
|
static int run(int argc, char* argv[]) {
|
|
NodeRunner runner;
|
|
if (!runner.parse_args(argc, argv)) {
|
|
return 1;
|
|
}
|
|
auto node = std::make_unique<NodeType>();
|
|
return runner.exec(std::move(node));
|
|
}
|
|
|
|
private:
|
|
bool parse_args(int argc, char* argv[]);
|
|
int exec(std::unique_ptr<Node> node);
|
|
|
|
std::string node_id_;
|
|
uint16_t control_port_ = 0;
|
|
std::string mxl_domain_ = "/dev/shm/mxl";
|
|
std::string config_str_;
|
|
|
|
mxlInstance mxl_instance_ = nullptr;
|
|
std::atomic<bool> running_{false};
|
|
};
|
|
|
|
} // namespace dmf_node
|