/* cuframes-composer — control plane через ZMQ + JSON. * * Слушает JSON-команды на ZMQ REP socket, диспатчит их в composer/overlay. * Используется операторами для: * - изменения text overlay'я live ("NO SIGNAL" → "RECORDING") * - toggle visible/alpha без рестарта * - health-репортов (active/stale/dead) для observability и автоматики * * Протокол: * Запрос: JSON-объект {"cmd": "<команда>", ...} * Ответ: {"ok": true, ...} либо {"error": "<сообщение>"} * * Команды Phase 4a: * {"cmd": "ping"} → {"ok":true,"pong":1} * {"cmd": "health"} → {"ok":true,"active":N,"stale":M,"dead":K} * {"cmd": "list_overlays"} → {"ok":true,"overlays":[{"id":"...","type":N},...]} * {"cmd": "set_text", "id": "...", * "text": "...", "r":255,"g":255,"b":255,"visible":1} * → {"ok":true} * {"cmd": "set_visible", "id": "...", * "visible": 0|1} → {"ok":true} * * Сервер работает в фоновом потоке. REP socket — блокирующий, но мы используем * zmq_poll с таймаутом для проверки stop_flag'а. * * Лицензия: LGPL-2.1+ */ #ifndef CUFRAMES_COMPOSER_CONTROL_H #define CUFRAMES_COMPOSER_CONTROL_H #include "composer.h" #ifdef __cplusplus extern "C" { #endif typedef struct cfc_control_config { const char *bind_endpoint; /* "tcp://0.0.0.0:5599" или "ipc:///run/composer.sock" */ cfc_composer_t *composer; /* для health-запросов и lookup overlay'ев */ CUcontext cuda_ctx; /* push'нется в control thread (для cuMemAlloc в text rebuild) */ } cfc_control_config_t; typedef struct cfc_control cfc_control_t; /* Создать control plane сервер и запустить background thread. */ int cfc_control_create(const cfc_control_config_t *cfg, cfc_control_t **out); /* Остановить и освободить. */ int cfc_control_destroy(cfc_control_t *ctl); #ifdef __cplusplus } #endif #endif /* CUFRAMES_COMPOSER_CONTROL_H */