diff --git a/cmvr-es/CMakeLists.txt b/cmvr-es/CMakeLists.txt index f98ed533..1d6f8080 100644 --- a/cmvr-es/CMakeLists.txt +++ b/cmvr-es/CMakeLists.txt @@ -6,15 +6,15 @@ add_subdirectory(hardware) add_subdirectory(algorithms) add_subdirectory(simulate) add_subdirectory(devices) -add_subdirectory(manager/control_authority) -add_subdirectory(manager/safety) +add_subdirectory(manager/control_authority_manager) +add_subdirectory(manager/safety_manager) add_subdirectory(manager/device_manager) -add_subdirectory(service/stop_all) -add_subdirectory(manager/media_source_hub) +add_subdirectory(service/grpc/stop_all) +add_subdirectory(manager/media_source_manager) add_subdirectory(service/quic_edge) -add_subdirectory(service/arm_teleop_client) add_subdirectory(task) add_subdirectory(task/quic_edge_task) +add_subdirectory(service/grpc/client) add_subdirectory(task/ume_teleop_task) add_subdirectory(manager/task_manager) add_subdirectory(service) diff --git a/cmvr-es/common/README.md b/cmvr-es/common/README.md index cf60bb8d..a8a21010 100644 --- a/cmvr-es/common/README.md +++ b/cmvr-es/common/README.md @@ -54,7 +54,7 @@ AGV 通用类型应参考 [`types/agv/agv_types.h`](types/agv/agv_types.h),机 - AAC、Opus、PCM 明确 payload format、采样率和声道数; - 不把 QUIC、gRPC 或浏览器专有字段加入通用帧。 -设备媒体接入流程见 [`../manager/README.md`](../manager/README.md) 的 MediaSourceHub 章节。 +设备媒体接入流程见 [`../manager/README.md`](../manager/README.md) 的 MediaSourceManager 章节。 ## 环形队列选择 diff --git a/cmvr-es/devices/README.md b/cmvr-es/devices/README.md index b979284f..f7175729 100644 --- a/cmvr-es/devices/README.md +++ b/cmvr-es/devices/README.md @@ -222,7 +222,7 @@ CameraDeviceConfig / AGVDeviceConfig / ... 的外层 id ## 摄像头与麦克风实时流 -设备实现抽象流接口后,由 [`../manager/media_source_hub/`](../manager/media_source_hub/) 适配给 gRPC 和 QUIC,不应在设备后端实现两套协议代码。 +设备实现抽象流接口后,由 [`../manager/media_source_manager/`](../manager/media_source_manager/) 适配给 gRPC 和 QUIC,不应在设备后端实现两套协议代码。 当前 Hub 轨道: @@ -312,7 +312,7 @@ adapter 检测到描述变化后创建新 descriptor,设备后端不要自行 - 满队列覆盖旧数据是实时媒体的预期行为; - `waitEncodedFrame()` 必须有有限 timeout,不能永久阻塞。 -MediaSourceHub Subscription 同样是单消费者对象,不同协议或客户端必须各自订阅。 +MediaSourceManager Subscription 同样是单消费者对象,不同协议或客户端必须各自订阅。 发布后的 `MediaFrame`、`TrackDescriptor` 和 payload 不可再修改。 @@ -334,19 +334,19 @@ MediaSourceHub Subscription 同样是单消费者对象,不同协议或客户 无硬件参考测试: - [`camera/hikvision_camera/tests/hikvision_camera_callback_test.cpp`](camera/hikvision_camera/tests/hikvision_camera_callback_test.cpp) -- [`../manager/media_source_hub/tests/media_source_hub_test.cpp`](../manager/media_source_hub/tests/media_source_hub_test.cpp) +- [`../manager/media_source_manager/tests/media_source_manager_test.cpp`](../manager/media_source_manager/tests/media_source_manager_test.cpp) ```bash cmake -S . -B build \ -DCMVR_ARCH=x86 \ -DBUILD_TESTING=ON \ - -DCMVR_MEDIA_SOURCE_HUB_BUILD_TESTS=ON + -DCMVR_MEDIA_SOURCE_MANAGER_BUILD_TESTS=ON cmake --build build -j"$(nproc)" ctest \ --test-dir build \ - -R 'hikvision_camera_callback_test|media_source_hub_test' \ + -R 'hikvision_camera_callback_test|media_source_manager_test' \ --output-on-failure ``` diff --git a/cmvr-es/devices/arm/aubo_arm/README.md b/cmvr-es/devices/arm/aubo_arm/README.md index 55ef34f1..669aa42d 100644 --- a/cmvr-es/devices/arm/aubo_arm/README.md +++ b/cmvr-es/devices/arm/aubo_arm/README.md @@ -17,7 +17,7 @@ - DeviceManager 配置: [`../../../config/manager/device_manager.pb.txt`](../../../config/manager/device_manager.pb.txt) - ArmService 实现: - [`../../../service/grpc/src/grpc_arm_service.cpp`](../../../service/grpc/src/grpc_arm_service.cpp) + [`../../../service/grpc/server/src/grpc_arm_service.cpp`](../../../service/grpc/server/src/grpc_arm_service.cpp) - Proto:[`../../../../protos/cmvr/api/arm_service.proto`](../../../../protos/cmvr/api/arm_service.proto) 仓库配置使用 SDK RPC 端口 `30004`。现场部署必须填写真实控制器地址和凭据, diff --git a/cmvr-es/manager/README.md b/cmvr-es/manager/README.md index b30bc369..620a6288 100644 --- a/cmvr-es/manager/README.md +++ b/cmvr-es/manager/README.md @@ -6,13 +6,20 @@ ## 当前管理器 +管理模块目录统一使用 `*_manager` 后缀,主管理类使用 `*Manager` 后缀。工厂、适配器、 +账本、快照和结果结构体属于管理器内部的支撑类型,保留其职责名称,不强行改成 +`*Manager`。 + | 目录 | CMake target | 职责 | | --- | --- | --- | +| [`control_authority_manager/`](control_authority_manager/) | `cmvr_es::control_authority_manager` | 控制权租约、代际、dispatch fence 和 quarantine | | [`device_manager/`](device_manager/) | `cmvr_es::device_manager` | 按配置创建、初始化、查询和批量启停设备 | +| [`safety_manager/`](safety_manager/) | `cmvr_es::safety_manager` | Sensor/Control 安全准入、StopAll、恢复和命令账本 | | [`task_manager/`](task_manager/) | `cmvr_es::task_manager` | 创建任务、校验运行模式、统一启停和调度周期任务 | -| [`media_source_hub/`](media_source_hub/) | `cmvr_es::media_source_hub`、`cmvr_es::device_media_source_adapter` | 实时媒体源注册、按需启停和多消费者分发 | +| [`media_source_manager/`](media_source_manager/) | `cmvr_es::media_source_manager`、`cmvr_es::device_media_source_adapter` | 实时媒体源注册、按需启停和多消费者分发 | -`manager/` 当前没有聚合 `CMakeLists.txt`,三个子目录由 [`../CMakeLists.txt`](../CMakeLists.txt) 分别加入。新增 manager 时必须显式更新该文件。 +`manager/` 当前没有聚合 `CMakeLists.txt`,所有模块由 [`../CMakeLists.txt`](../CMakeLists.txt) +按依赖顺序加入。新增 manager 时必须同时更新目录、target、依赖顺序和本 README。 ## 进程生命周期 @@ -136,12 +143,12 @@ - 有顺序依赖的工作应放入同一协调任务或显式建模; - task 返回后,其内部状态并发安全由具体实现负责。 -## MediaSourceHub +## MediaSourceManager 关键文件: -- [`media_source_hub/include/media_source_hub.h`](media_source_hub/include/media_source_hub.h) -- [`media_source_hub/src/device_media_source_adapter.cpp`](media_source_hub/src/device_media_source_adapter.cpp) +- [`media_source_manager/include/media_source_manager.h`](media_source_manager/include/media_source_manager.h) +- [`media_source_manager/src/device_media_source_adapter.cpp`](media_source_manager/src/device_media_source_adapter.cpp) - [`../common/media/media_frame.h`](../common/media/media_frame.h) - [`../common/base/ring_buffer.h`](../common/base/ring_buffer.h) @@ -152,7 +159,8 @@ | 摄像头彩色流 | `/video/color` | 64 | | 麦克风主流 | `/audio/main` | 256 | -当前 gRPC RGB/麦克风流和 QUIC 彩色/麦克风轨道使用 Hub;gRPC Depth/RGBD 仍直接读取设备帧。 +当前 gRPC RGB/麦克风流和 QUIC 彩色/麦克风轨道使用 MediaSourceManager;gRPC Depth/RGBD +仍直接读取设备帧。 ### 注册新媒体源 @@ -211,7 +219,7 @@ ring generation 不等于 `TrackDescriptor::generation`,ring 的 `ReadResult.s ## 新增第四种 Manager -1. 先确认能力不是 DeviceManager、TaskManager 或 MediaSourceHub 的子职责; +1. 先确认能力不是 DeviceManager、TaskManager 或 MediaSourceManager 的子职责; 2. 定义所有权、初始化、start/stop 和线程模型; 3. 避免新增无必要的全局单例; 4. 新建独立目录、头文件、实现和 CMake target; @@ -221,13 +229,13 @@ ring generation 不等于 `TrackDescriptor::generation`,ring 的 `ReadResult.s ## 测试 -MediaSourceHub: +MediaSourceManager: ```bash -cmake --build build --target media_source_hub_test +cmake --build build --target media_source_manager_test ctest \ --test-dir build \ - -R '^media_source_hub_test$' \ + -R '^media_source_manager_test$' \ --output-on-failure ``` diff --git a/cmvr-es/manager/control_authority/CMakeLists.txt b/cmvr-es/manager/control_authority_manager/CMakeLists.txt similarity index 62% rename from cmvr-es/manager/control_authority/CMakeLists.txt rename to cmvr-es/manager/control_authority_manager/CMakeLists.txt index f2950a43..f69da862 100644 --- a/cmvr-es/manager/control_authority/CMakeLists.txt +++ b/cmvr-es/manager/control_authority_manager/CMakeLists.txt @@ -1,17 +1,17 @@ -add_library(control_authority STATIC +add_library(control_authority_manager STATIC src/control_authority_manager.cpp ) -target_compile_features(control_authority PUBLIC cxx_std_17) -target_include_directories(control_authority +target_compile_features(control_authority_manager PUBLIC cxx_std_17) +target_include_directories(control_authority_manager PUBLIC ${PROJECT_SOURCE_DIR}/cmvr-es ) add_library( - cmvr_es::control_authority - ALIAS control_authority + cmvr_es::control_authority_manager + ALIAS control_authority_manager ) -install(TARGETS control_authority ARCHIVE DESTINATION lib) +install(TARGETS control_authority_manager ARCHIVE DESTINATION lib) if(BUILD_TESTING) add_executable(control_authority_manager_test @@ -19,7 +19,7 @@ if(BUILD_TESTING) ) target_link_libraries(control_authority_manager_test PRIVATE - cmvr_es::control_authority + cmvr_es::control_authority_manager gtest gtest_main pthread diff --git a/cmvr-es/manager/control_authority/include/control_authority_manager.h b/cmvr-es/manager/control_authority_manager/include/control_authority_manager.h similarity index 100% rename from cmvr-es/manager/control_authority/include/control_authority_manager.h rename to cmvr-es/manager/control_authority_manager/include/control_authority_manager.h diff --git a/cmvr-es/manager/control_authority/src/control_authority_manager.cpp b/cmvr-es/manager/control_authority_manager/src/control_authority_manager.cpp similarity index 99% rename from cmvr-es/manager/control_authority/src/control_authority_manager.cpp rename to cmvr-es/manager/control_authority_manager/src/control_authority_manager.cpp index 614c32d4..19063685 100644 --- a/cmvr-es/manager/control_authority/src/control_authority_manager.cpp +++ b/cmvr-es/manager/control_authority_manager/src/control_authority_manager.cpp @@ -1,4 +1,4 @@ -#include "manager/control_authority/include/control_authority_manager.h" +#include "manager/control_authority_manager/include/control_authority_manager.h" #include diff --git a/cmvr-es/manager/control_authority/tests/control_authority_manager_test.cpp b/cmvr-es/manager/control_authority_manager/tests/control_authority_manager_test.cpp similarity index 99% rename from cmvr-es/manager/control_authority/tests/control_authority_manager_test.cpp rename to cmvr-es/manager/control_authority_manager/tests/control_authority_manager_test.cpp index 02d92671..f0703b7b 100644 --- a/cmvr-es/manager/control_authority/tests/control_authority_manager_test.cpp +++ b/cmvr-es/manager/control_authority_manager/tests/control_authority_manager_test.cpp @@ -1,4 +1,4 @@ -#include "manager/control_authority/include/control_authority_manager.h" +#include "manager/control_authority_manager/include/control_authority_manager.h" #include #include diff --git a/cmvr-es/manager/device_manager/CMakeLists.txt b/cmvr-es/manager/device_manager/CMakeLists.txt index 67029d2e..5183fced 100644 --- a/cmvr-es/manager/device_manager/CMakeLists.txt +++ b/cmvr-es/manager/device_manager/CMakeLists.txt @@ -8,7 +8,7 @@ target_include_directories(device_manager PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) target_link_libraries(device_manager PRIVATE cmvr_es::proto - cmvr_es::safety_coordinator + cmvr_es::safety_manager cmvr_es::device::camera cmvr_es::device::agv cmvr_es::device::speaker diff --git a/cmvr-es/manager/device_manager/include/device_manager.h b/cmvr-es/manager/device_manager/include/device_manager.h index 1a353457..a974bce0 100644 --- a/cmvr-es/manager/device_manager/include/device_manager.h +++ b/cmvr-es/manager/device_manager/include/device_manager.h @@ -15,7 +15,7 @@ #include "device_factory.h" #include "cmvr/config/device_manager_config/device_manager_config.pb.h" -#include "manager/safety/include/safety_coordinator.h" +#include "manager/safety_manager/include/safety_manager.h" namespace cmvr::device { @@ -48,13 +48,13 @@ namespace cmvr::device { std::vector inventorySnapshot() const; DeviceManagerSnapshot snapshot() const; - safety::SafetyCoordinator& safetyCoordinator() noexcept + safety::SafetyManager& safetyManager() noexcept { - return *safety_coordinator_; + return *safety_manager_; } - const safety::SafetyCoordinator& safetyCoordinator() const noexcept + const safety::SafetyManager& safetyManager() const noexcept { - return *safety_coordinator_; + return *safety_manager_; } std::string version() const; @@ -74,7 +74,7 @@ namespace cmvr::device { std::unordered_map devices_; std::unordered_map device_statuses_; std::unique_ptr dev_factory_; - std::unique_ptr safety_coordinator_; + std::unique_ptr safety_manager_; bool initialized_{false}; explicit DeviceManager(const config::DeviceManagerConfig &cfg); diff --git a/cmvr-es/manager/device_manager/include/device_safety_adapters.h b/cmvr-es/manager/device_manager/include/device_safety_adapters.h index 346cd10d..359d7f4e 100644 --- a/cmvr-es/manager/device_manager/include/device_safety_adapters.h +++ b/cmvr-es/manager/device_manager/include/device_safety_adapters.h @@ -4,7 +4,7 @@ #include #include "devices/abstract_device.h" -#include "manager/safety/include/safety_participant.h" +#include "manager/safety_manager/include/safety_participant.h" namespace cmvr::device { diff --git a/cmvr-es/manager/device_manager/src/device_manager.cpp b/cmvr-es/manager/device_manager/src/device_manager.cpp index c10ea258..2ffffbb1 100644 --- a/cmvr-es/manager/device_manager/src/device_manager.cpp +++ b/cmvr-es/manager/device_manager/src/device_manager.cpp @@ -38,10 +38,10 @@ using MotorJointSelections = std::unordered_map()), - safety_coordinator_(std::make_unique( + safety_manager_(std::make_unique( safetyConfigFrom(cfg))) { initialize_device_statuses_(); @@ -313,7 +313,7 @@ bool DeviceManager::start(){ bool started = false; std::string error_message; try { - (void)safety_coordinator_->advanceDeviceGeneration(id); + (void)safety_manager_->advanceDeviceGeneration(id); started = device->start(); if (!started) { error_message = "device start returned false: " + id; @@ -342,7 +342,7 @@ bool DeviceManager::start(){ } } if (all_started) { - const auto coverage = safety_coordinator_->validateStartupCoverage( + const auto coverage = safety_manager_->validateStartupCoverage( safety::SafetyClock::now() + kSafetyStartupValidationTimeout); if (!coverage.ready) { all_started = false; @@ -363,7 +363,7 @@ bool DeviceManager::start(){ // explicit stop() records Stopped/Error transitions. stop_devices_(false); } else { - safety_coordinator_->markStartupComplete(); + safety_manager_->markStartupComplete(); } return all_started; } @@ -422,7 +422,7 @@ void DeviceManager::stop_devices_(const bool update_status) { update_device_status_(id, ManagedDeviceState::Stopped); } CMVR_LOG(INFO) << "[DeviceManager]: Stop device " << id << " Success"; - safety_coordinator_->updateDeviceRuntimeState( + safety_manager_->updateDeviceRuntimeState( id, ManagedDeviceState::Stopped, sample_device_health_(device)); } else { @@ -431,7 +431,7 @@ void DeviceManager::stop_devices_(const bool update_status) { id, ManagedDeviceState::Error, error_message); } CMVR_LOG(ERROR) << "[DeviceManager]: Stop device " << id << " Failed"; - safety_coordinator_->updateDeviceRuntimeState( + safety_manager_->updateDeviceRuntimeState( id, ManagedDeviceState::Error, {DeviceHealthState::Fault, error_message}); } @@ -634,7 +634,7 @@ void DeviceManager::update_device_status_( status.status_updated_at_unix_ms = unixTimeMs(); health = status.health; } - safety_coordinator_->updateDeviceRuntimeState(device_id, state, health); + safety_manager_->updateDeviceRuntimeState(device_id, state, health); } DeviceManagerSnapshot DeviceManager::snapshot() const @@ -724,7 +724,7 @@ void DeviceManager::update_device_health_( status.status_updated_at_unix_ms = unixTimeMs(); health = status.health; } - safety_coordinator_->updateDeviceRuntimeState( + safety_manager_->updateDeviceRuntimeState( device_id, lifecycle, std::move(health)); } @@ -750,7 +750,7 @@ bool DeviceManager::register_device_safety_( return false; } const bool registered = - safety_coordinator_->registerDevice(std::move(registration)); + safety_manager_->registerDevice(std::move(registration)); return registered; } diff --git a/cmvr-es/manager/device_manager/src/device_safety_adapters.cpp b/cmvr-es/manager/device_manager/src/device_safety_adapters.cpp index 6486c2fa..eb627d0f 100644 --- a/cmvr-es/manager/device_manager/src/device_safety_adapters.cpp +++ b/cmvr-es/manager/device_manager/src/device_safety_adapters.cpp @@ -21,8 +21,8 @@ #include "devices/microphone/abstract_microphone.h" #include "devices/motor/manager/include/motor_manager.h" #include "devices/speaker/abstract_speaker.h" -#include "manager/control_authority/include/control_authority_manager.h" -#include "manager/safety/include/device_safety_endpoint.h" +#include "manager/control_authority_manager/include/control_authority_manager.h" +#include "manager/safety_manager/include/device_safety_endpoint.h" namespace cmvr::device { diff --git a/cmvr-es/manager/device_manager/tests/device_manager_lifecycle_test.cpp b/cmvr-es/manager/device_manager/tests/device_manager_lifecycle_test.cpp index 07f3a456..4149a835 100644 --- a/cmvr-es/manager/device_manager/tests/device_manager_lifecycle_test.cpp +++ b/cmvr-es/manager/device_manager/tests/device_manager_lifecycle_test.cpp @@ -127,14 +127,14 @@ TEST_F(DeviceManagerLifecycleTest, cmvr::config::DeviceManagerConfig config; auto* safety = config.mutable_safety(); safety->set_mode( - cmvr::config::SafetyCoordinatorConfig::ENFORCE_SELECTED); + cmvr::config::SafetyManagerConfig::ENFORCE_SELECTED); safety->add_enforced_device_ids("missing-arm"); auto& manager = cmvr::device::DeviceManager::getInstance(config); ASSERT_TRUE(manager.initialized()); EXPECT_FALSE(manager.start()); EXPECT_EQ( - manager.safetyCoordinator().snapshot().system_state, + manager.safetyManager().snapshot().system_state, cmvr::safety::SystemAdmissionState::Starting); } @@ -143,7 +143,7 @@ TEST_F(DeviceManagerLifecycleTest, { cmvr::config::DeviceManagerConfig config; config.mutable_safety()->set_mode( - cmvr::config::SafetyCoordinatorConfig::ENFORCE_SELECTED); + cmvr::config::SafetyManagerConfig::ENFORCE_SELECTED); auto& manager = cmvr::device::DeviceManager::getInstance(config); ASSERT_TRUE(manager.initialized()); diff --git a/cmvr-es/manager/media_source_hub/CMakeLists.txt b/cmvr-es/manager/media_source_manager/CMakeLists.txt similarity index 70% rename from cmvr-es/manager/media_source_hub/CMakeLists.txt rename to cmvr-es/manager/media_source_manager/CMakeLists.txt index 49b6473e..b5369f7c 100644 --- a/cmvr-es/manager/media_source_hub/CMakeLists.txt +++ b/cmvr-es/manager/media_source_manager/CMakeLists.txt @@ -1,28 +1,28 @@ if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) cmake_minimum_required(VERSION 3.22) - project(cmvr_media_source_hub LANGUAGES CXX) + project(cmvr_media_source_manager LANGUAGES CXX) enable_testing() add_subdirectory( - ${CMAKE_CURRENT_SOURCE_DIR}/../../service/stop_all + ${CMAKE_CURRENT_SOURCE_DIR}/../../service/grpc/stop_all ${CMAKE_CURRENT_BINARY_DIR}/stop_all ) endif() -add_library(media_source_hub STATIC - src/media_source_hub.cpp +add_library(media_source_manager STATIC + src/media_source_manager.cpp ) -target_compile_features(media_source_hub PUBLIC cxx_std_17) -target_include_directories(media_source_hub +target_compile_features(media_source_manager PUBLIC cxx_std_17) +target_include_directories(media_source_manager PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../.. ) -target_link_libraries(media_source_hub +target_link_libraries(media_source_manager PUBLIC cmvr_es::stop_all_admission_gate ) -add_library(cmvr_es::media_source_hub ALIAS media_source_hub) +add_library(cmvr_es::media_source_manager ALIAS media_source_manager) if(NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) add_library(device_media_source_adapter STATIC @@ -35,11 +35,11 @@ if(NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) ) target_link_libraries(device_media_source_adapter PUBLIC - cmvr_es::media_source_hub + cmvr_es::media_source_manager cmvr_es::common cmvr_es::proto cmvr_es::logging - cmvr_es::safety_coordinator + cmvr_es::safety_manager ) add_library(cmvr_es::device_media_source_adapter ALIAS device_media_source_adapter) @@ -71,27 +71,27 @@ if(NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) endif() endif() -option(CMVR_MEDIA_SOURCE_HUB_BUILD_TESTS - "Build the standalone MediaSourceHub self-test" +option(CMVR_MEDIA_SOURCE_MANAGER_BUILD_TESTS + "Build the standalone MediaSourceManager self-test" ${PROJECT_IS_TOP_LEVEL}) -if(CMVR_MEDIA_SOURCE_HUB_BUILD_TESTS) +if(CMVR_MEDIA_SOURCE_MANAGER_BUILD_TESTS) find_package(Threads REQUIRED) - add_executable(media_source_hub_test - tests/media_source_hub_test.cpp + add_executable(media_source_manager_test + tests/media_source_manager_test.cpp ) - target_compile_features(media_source_hub_test PRIVATE cxx_std_17) - target_link_libraries(media_source_hub_test + target_compile_features(media_source_manager_test PRIVATE cxx_std_17) + target_link_libraries(media_source_manager_test PRIVATE - cmvr_es::media_source_hub + cmvr_es::media_source_manager Threads::Threads ) # This self-test only links the static Hub and pthreads. In the root build, # the project-wide third-party RUNPATH can otherwise make the loader pick up # a vendor libstdc++.so (for example from the AUBO SDK), even though the test # has no dependency on that SDK. - set_target_properties(media_source_hub_test PROPERTIES + set_target_properties(media_source_manager_test PROPERTIES SKIP_BUILD_RPATH TRUE ) - add_test(NAME media_source_hub_test COMMAND media_source_hub_test) + add_test(NAME media_source_manager_test COMMAND media_source_manager_test) endif() diff --git a/cmvr-es/manager/media_source_hub/include/device_media_source_adapter.h b/cmvr-es/manager/media_source_manager/include/device_media_source_adapter.h similarity index 84% rename from cmvr-es/manager/media_source_hub/include/device_media_source_adapter.h rename to cmvr-es/manager/media_source_manager/include/device_media_source_adapter.h index b23b0535..9dcbcef5 100644 --- a/cmvr-es/manager/media_source_hub/include/device_media_source_adapter.h +++ b/cmvr-es/manager/media_source_manager/include/device_media_source_adapter.h @@ -9,13 +9,13 @@ #include "devices/camera/abstract_camera.h" #include "devices/microphone/abstract_microphone.h" -#include "manager/media_source_hub/include/media_source_hub.h" -#include "manager/safety/include/safety_coordinator.h" +#include "manager/media_source_manager/include/media_source_manager.h" +#include "manager/safety_manager/include/safety_manager.h" namespace cmvr::media { // Process-wide protocol-neutral media hub shared by gRPC and QUIC services. -MediaSourceHub& globalMediaSourceHub(); +MediaSourceManager& globalMediaSourceManager(); std::string cameraColorTrackId(const std::string& device_id); std::string microphoneTrackId(const std::string& device_id); @@ -24,7 +24,7 @@ std::string microphoneTrackId(const std::string& device_id); // device endpoint's final hardware check. Keep the returned guard alive until // the operation which can start the physical media producer has returned. safety::DispatchGuard beginMediaSourceStartDispatch( - safety::SafetyCoordinator& coordinator, + safety::SafetyManager& coordinator, const std::string& device_id); // Registration is idempotent for an already registered track. The adapter owns a @@ -32,12 +32,12 @@ safety::DispatchGuard beginMediaSourceStartDispatch( // at least one Hub subscription is active. It ensures start() succeeds but deliberately // does not call stop(), because the base device lifecycle can also be owned by control RPCs. bool ensureCameraMediaSource( - MediaSourceHub& hub, + MediaSourceManager& hub, const std::shared_ptr& camera, size_t ring_capacity = 64); bool ensureMicrophoneMediaSource( - MediaSourceHub& hub, + MediaSourceManager& hub, const std::shared_ptr& microphone, size_t ring_capacity = 256); diff --git a/cmvr-es/manager/media_source_hub/include/media_source_hub.h b/cmvr-es/manager/media_source_manager/include/media_source_manager.h similarity index 90% rename from cmvr-es/manager/media_source_hub/include/media_source_hub.h rename to cmvr-es/manager/media_source_manager/include/media_source_manager.h index c09bf4d0..6efa6422 100644 --- a/cmvr-es/manager/media_source_hub/include/media_source_hub.h +++ b/cmvr-es/manager/media_source_manager/include/media_source_manager.h @@ -1,5 +1,5 @@ -#ifndef CMVR_ES_MANAGER_MEDIA_SOURCE_HUB_H -#define CMVR_ES_MANAGER_MEDIA_SOURCE_HUB_H +#ifndef CMVR_ES_MANAGER_MEDIA_SOURCE_MANAGER_H +#define CMVR_ES_MANAGER_MEDIA_SOURCE_MANAGER_H #pragma once @@ -21,15 +21,15 @@ class StopAllAdmissionGate; namespace cmvr::media { -// MediaSourceHub owns no protocol-specific state. A device or capture adapter registers +// MediaSourceManager owns no protocol-specific state. A device or capture adapter registers // start/stop callbacks and receives a sink callback when the first consumer subscribes. -class MediaSourceHub final { +class MediaSourceManager final { public: using FrameRing = BroadcastFrameRing; using FrameReadResult = FrameRing::ReadResult; using StartPosition = FrameRing::StartPosition; using FrameSink = std::function; - // Cancellation checks run while MediaSourceHub protects source lifecycle + // Cancellation checks run while MediaSourceManager protects source lifecycle // state. Predicates must therefore be fast, non-blocking and must not call // back into the same hub. using CancelPredicate = std::function; @@ -37,7 +37,7 @@ public: struct SourceCallbacks { // start() may run asynchronously. It must observe cancelled during any // potentially blocking startup work and return false promptly once set. - // MediaSourceHub retains the callback state until a non-cooperative start + // MediaSourceManager retains the callback state until a non-cooperative start // eventually returns, so late completion cannot access destroyed state. std::function source, FrameRing::Cursor cursor); std::shared_ptr source_; @@ -94,12 +94,12 @@ public: // Pass the process-wide StopAll gate for a hub whose sources are part of // whole-machine operational stopping. Test/private hubs may remain local. - explicit MediaSourceHub( + explicit MediaSourceManager( service::StopAllAdmissionGate* admission_gate = nullptr); - ~MediaSourceHub(); + ~MediaSourceManager(); - MediaSourceHub(const MediaSourceHub&) = delete; - MediaSourceHub& operator=(const MediaSourceHub&) = delete; + MediaSourceManager(const MediaSourceManager&) = delete; + MediaSourceManager& operator=(const MediaSourceManager&) = delete; bool registerSource( TrackDescriptorPtr initial_descriptor, @@ -159,4 +159,4 @@ private: } // namespace cmvr::media -#endif // CMVR_ES_MANAGER_MEDIA_SOURCE_HUB_H +#endif // CMVR_ES_MANAGER_MEDIA_SOURCE_MANAGER_H diff --git a/cmvr-es/manager/media_source_hub/src/device_media_source_adapter.cpp b/cmvr-es/manager/media_source_manager/src/device_media_source_adapter.cpp similarity index 96% rename from cmvr-es/manager/media_source_hub/src/device_media_source_adapter.cpp rename to cmvr-es/manager/media_source_manager/src/device_media_source_adapter.cpp index 70cbf688..b8911a60 100644 --- a/cmvr-es/manager/media_source_hub/src/device_media_source_adapter.cpp +++ b/cmvr-es/manager/media_source_manager/src/device_media_source_adapter.cpp @@ -1,6 +1,6 @@ -#include "manager/media_source_hub/include/device_media_source_adapter.h" +#include "manager/media_source_manager/include/device_media_source_adapter.h" -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" #include #include @@ -131,8 +131,8 @@ struct PumpState : public std::enable_shared_from_this> { } bool begin( - const MediaSourceHub::FrameSink& frame_sink, - const MediaSourceHub::CancelPredicate& cancelled) { + const MediaSourceManager::FrameSink& frame_sink, + const MediaSourceManager::CancelPredicate& cancelled) { if (!frame_sink || !device) { return false; } @@ -288,7 +288,7 @@ struct PumpState : public std::enable_shared_from_this> { std::atomic running{false}; std::mutex mutex; std::thread worker; - MediaSourceHub::FrameSink sink; + MediaSourceManager::FrameSink sink; bool streaming_started{false}; }; @@ -448,7 +448,7 @@ struct CameraPump final : PumpState { frame.key_frame = source.bKey; frame.discontinuity = pending_discontinuity; - MediaSourceHub::FrameSink current_sink; + MediaSourceManager::FrameSink current_sink; { std::lock_guard lock(mutex); current_sink = sink; @@ -581,7 +581,7 @@ struct MicrophonePump final : PumpState { frame.key_frame = true; frame.discontinuity = pending_discontinuity; - MediaSourceHub::FrameSink current_sink; + MediaSourceManager::FrameSink current_sink; { std::lock_guard lock(mutex); current_sink = sink; @@ -619,8 +619,8 @@ TrackDescriptorPtr initialTrack( } // namespace -MediaSourceHub& globalMediaSourceHub() { - static MediaSourceHub hub(&service::globalStopAllAdmissionGate()); +MediaSourceManager& globalMediaSourceManager() { + static MediaSourceManager hub(&service::globalStopAllAdmissionGate()); return hub; } @@ -633,12 +633,12 @@ std::string microphoneTrackId(const std::string& device_id) { } safety::DispatchGuard beginMediaSourceStartDispatch( - safety::SafetyCoordinator& coordinator, + safety::SafetyManager& coordinator, const std::string& device_id) { safety::AdmissionRequest request; request.command = { - "cmvr.internal.MediaSourceHub/StartSource", + "cmvr.internal.MediaSourceManager/StartSource", safety::CommandIntent::StartActivity, safety::SafetyPolicyFamily::Sensor, true, @@ -670,7 +670,7 @@ safety::DispatchGuard beginMediaSourceStartDispatch( } bool ensureCameraMediaSource( - MediaSourceHub& hub, + MediaSourceManager& hub, const std::shared_ptr& camera, const size_t ring_capacity) { if (!camera || camera->id().empty()) { @@ -682,10 +682,10 @@ bool ensureCameraMediaSource( } const auto pump = std::make_shared(camera, track_id); - MediaSourceHub::SourceCallbacks callbacks; + MediaSourceManager::SourceCallbacks callbacks; callbacks.start = [pump]( - const MediaSourceHub::FrameSink& sink, - const MediaSourceHub::CancelPredicate& cancelled) { + const MediaSourceManager::FrameSink& sink, + const MediaSourceManager::CancelPredicate& cancelled) { return pump->begin(sink, cancelled); }; callbacks.stop_confirmed = [pump] { return pump->stop(); }; @@ -702,7 +702,7 @@ bool ensureCameraMediaSource( } bool ensureMicrophoneMediaSource( - MediaSourceHub& hub, + MediaSourceManager& hub, const std::shared_ptr& microphone, const size_t ring_capacity) { if (!microphone || microphone->id().empty()) { @@ -714,10 +714,10 @@ bool ensureMicrophoneMediaSource( } const auto pump = std::make_shared(microphone, track_id); - MediaSourceHub::SourceCallbacks callbacks; + MediaSourceManager::SourceCallbacks callbacks; callbacks.start = [pump]( - const MediaSourceHub::FrameSink& sink, - const MediaSourceHub::CancelPredicate& cancelled) { + const MediaSourceManager::FrameSink& sink, + const MediaSourceManager::CancelPredicate& cancelled) { return pump->begin(sink, cancelled); }; callbacks.stop_confirmed = [pump] { return pump->stop(); }; diff --git a/cmvr-es/manager/media_source_hub/src/media_source_hub.cpp b/cmvr-es/manager/media_source_manager/src/media_source_manager.cpp similarity index 92% rename from cmvr-es/manager/media_source_hub/src/media_source_hub.cpp rename to cmvr-es/manager/media_source_manager/src/media_source_manager.cpp index 5942024d..1a69522d 100644 --- a/cmvr-es/manager/media_source_hub/src/media_source_hub.cpp +++ b/cmvr-es/manager/media_source_manager/src/media_source_manager.cpp @@ -1,4 +1,4 @@ -#include "manager/media_source_hub/include/media_source_hub.h" +#include "manager/media_source_manager/include/media_source_manager.h" #include #include @@ -9,11 +9,11 @@ #include #include -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" namespace cmvr::media { -struct MediaSourceHub::SourceState final : public std::enable_shared_from_this { +struct MediaSourceManager::SourceState final : public std::enable_shared_from_this { enum class Lifecycle { STOPPED, STARTING, @@ -406,7 +406,7 @@ struct MediaSourceHub::SourceState final : public std::enable_shared_from_this start_attempt; }; -struct MediaSourceHub::Impl final { +struct MediaSourceManager::Impl final { explicit Impl(service::StopAllAdmissionGate* source_admission_gate) : admission_gate(source_admission_gate) {} @@ -420,25 +420,25 @@ struct MediaSourceHub::Impl final { service::StopAllAdmissionGate* const admission_gate; }; -MediaSourceHub::Subscription::Subscription( +MediaSourceManager::Subscription::Subscription( std::shared_ptr source, FrameRing::Cursor cursor) : source_(std::move(source)), cursor_(std::move(cursor)), active_(static_cast(source_)) {} -MediaSourceHub::Subscription::~Subscription() { +MediaSourceManager::Subscription::~Subscription() { reset(); } -MediaSourceHub::Subscription::Subscription(Subscription&& other) noexcept +MediaSourceManager::Subscription::Subscription(Subscription&& other) noexcept : source_(std::move(other.source_)), cursor_(other.cursor_), active_(other.active_) { other.active_ = false; } -MediaSourceHub::Subscription& MediaSourceHub::Subscription::operator=(Subscription&& other) noexcept { +MediaSourceManager::Subscription& MediaSourceManager::Subscription::operator=(Subscription&& other) noexcept { if (this == &other) { return *this; } @@ -450,22 +450,22 @@ MediaSourceHub::Subscription& MediaSourceHub::Subscription::operator=(Subscripti return *this; } -bool MediaSourceHub::Subscription::valid() const { +bool MediaSourceManager::Subscription::valid() const { return active_ && source_ && source_->validForSubscription(); } -TrackDescriptorPtr MediaSourceHub::Subscription::descriptor() const { +TrackDescriptorPtr MediaSourceManager::Subscription::descriptor() const { return source_ ? source_->currentDescriptor() : nullptr; } -std::optional MediaSourceHub::Subscription::tryRead() { +std::optional MediaSourceManager::Subscription::tryRead() { if (!active_ || !source_) { return std::nullopt; } return source_->ring.tryRead(cursor_); } -std::optional MediaSourceHub::Subscription::waitRead( +std::optional MediaSourceManager::Subscription::waitRead( const std::chrono::milliseconds timeout) { if (!active_ || !source_) { return std::nullopt; @@ -473,7 +473,7 @@ std::optional MediaSourceHub::Subscription::wai return source_->ring.waitRead(cursor_, timeout); } -uint64_t MediaSourceHub::Subscription::discardPendingIfExceeds( +uint64_t MediaSourceManager::Subscription::discardPendingIfExceeds( const size_t maximum_pending_frames) { if (!active_ || !source_) { return 0; @@ -481,11 +481,11 @@ uint64_t MediaSourceHub::Subscription::discardPendingIfExceeds( return source_->ring.discardPendingIfExceeds(cursor_, maximum_pending_frames); } -uint64_t MediaSourceHub::Subscription::droppedCount() const noexcept { +uint64_t MediaSourceManager::Subscription::droppedCount() const noexcept { return cursor_.dropped_count; } -void MediaSourceHub::Subscription::reset() { +void MediaSourceManager::Subscription::reset() { if (active_ && source_) { source_->release(); } @@ -493,15 +493,15 @@ void MediaSourceHub::Subscription::reset() { source_.reset(); } -MediaSourceHub::MediaSourceHub( +MediaSourceManager::MediaSourceManager( service::StopAllAdmissionGate* admission_gate) : impl_(std::make_shared(admission_gate)) {} -MediaSourceHub::~MediaSourceHub() { +MediaSourceManager::~MediaSourceManager() { shutdown(); } -bool MediaSourceHub::registerSource( +bool MediaSourceManager::registerSource( TrackDescriptorPtr initial_descriptor, SourceCallbacks callbacks, const size_t ring_capacity) { @@ -556,7 +556,7 @@ bool MediaSourceHub::registerSource( return inserted; } -bool MediaSourceHub::unregisterSource(const std::string& track_id) { +bool MediaSourceManager::unregisterSource(const std::string& track_id) { if (!impl_ || track_id.empty()) { return false; } @@ -590,7 +590,7 @@ bool MediaSourceHub::unregisterSource(const std::string& track_id) { return false; } -bool MediaSourceHub::hasSource(const std::string& track_id) const { +bool MediaSourceManager::hasSource(const std::string& track_id) const { if (!impl_) { return false; } @@ -598,7 +598,7 @@ bool MediaSourceHub::hasSource(const std::string& track_id) const { return impl_->sources.find(track_id) != impl_->sources.end(); } -std::vector MediaSourceHub::listTracks() const { +std::vector MediaSourceManager::listTracks() const { std::vector> sources; if (!impl_) { return {}; @@ -625,7 +625,7 @@ std::vector MediaSourceHub::listTracks() const { return descriptors; } -std::vector MediaSourceHub::trackedSourceIds() const { +std::vector MediaSourceManager::trackedSourceIds() const { if (!impl_) { return {}; } @@ -644,7 +644,7 @@ std::vector MediaSourceHub::trackedSourceIds() const { return source_ids; } -size_t MediaSourceHub::subscriberCount(const std::string& track_id) const { +size_t MediaSourceManager::subscriberCount(const std::string& track_id) const { if (!impl_) { return 0; } @@ -660,7 +660,7 @@ size_t MediaSourceHub::subscriberCount(const std::string& track_id) const { return source->subscriberCount(); } -bool MediaSourceHub::requestKeyFrame(const std::string& track_id) const { +bool MediaSourceManager::requestKeyFrame(const std::string& track_id) const { if (!impl_) { return false; } @@ -676,7 +676,7 @@ bool MediaSourceHub::requestKeyFrame(const std::string& track_id) const { return source->requestKeyFrame(); } -MediaSourceHub::Subscription MediaSourceHub::subscribe( +MediaSourceManager::Subscription MediaSourceManager::subscribe( const std::string& track_id, const StartPosition start_position, CancelPredicate cancelled) { @@ -701,7 +701,7 @@ MediaSourceHub::Subscription MediaSourceHub::subscribe( return Subscription(std::move(source), std::move(cursor)); } -bool MediaSourceHub::stopSourcesForDevice( +bool MediaSourceManager::stopSourcesForDevice( const std::string& source_id, std::vector* failures) { if (source_id.empty()) { @@ -713,11 +713,11 @@ bool MediaSourceHub::stopSourcesForDevice( return stopSources(source_id, failures); } -bool MediaSourceHub::stopAllSources(std::vector* failures) { +bool MediaSourceManager::stopAllSources(std::vector* failures) { return stopSources(std::nullopt, failures); } -bool MediaSourceHub::stopSources( +bool MediaSourceManager::stopSources( const std::optional& source_id, std::vector* failures) { if (failures) { @@ -796,7 +796,7 @@ bool MediaSourceHub::stopSources( return quarantined.empty(); } -void MediaSourceHub::shutdown() { +void MediaSourceManager::shutdown() { (void)stopAllSources(); } diff --git a/cmvr-es/manager/media_source_hub/tests/device_media_source_adapter_test.cpp b/cmvr-es/manager/media_source_manager/tests/device_media_source_adapter_test.cpp similarity index 93% rename from cmvr-es/manager/media_source_hub/tests/device_media_source_adapter_test.cpp rename to cmvr-es/manager/media_source_manager/tests/device_media_source_adapter_test.cpp index 8516204c..0c007166 100644 --- a/cmvr-es/manager/media_source_hub/tests/device_media_source_adapter_test.cpp +++ b/cmvr-es/manager/media_source_manager/tests/device_media_source_adapter_test.cpp @@ -1,4 +1,4 @@ -#include "manager/media_source_hub/include/device_media_source_adapter.h" +#include "manager/media_source_manager/include/device_media_source_adapter.h" #include #include @@ -7,7 +7,7 @@ #include -#include "manager/safety/include/device_safety_endpoint.h" +#include "manager/safety_manager/include/device_safety_endpoint.h" namespace cmvr::media { namespace { @@ -81,9 +81,9 @@ private: TEST(DeviceMediaSourceAdapterTest, SensorStartUsesFinalCheckAndQuarantineRejectsRestart) { - safety::SafetyCoordinatorConfig config; + safety::SafetyManagerConfig config; config.enforcement_mode = safety::EnforcementMode::EnforceAll; - safety::SafetyCoordinator coordinator(config); + safety::SafetyManager coordinator(config); auto endpoint = std::make_shared("camera"); ASSERT_TRUE(coordinator.registerDevice( {endpoint->descriptor(), endpoint, {}})); diff --git a/cmvr-es/manager/media_source_hub/tests/media_source_hub_test.cpp b/cmvr-es/manager/media_source_manager/tests/media_source_manager_test.cpp similarity index 89% rename from cmvr-es/manager/media_source_hub/tests/media_source_hub_test.cpp rename to cmvr-es/manager/media_source_manager/tests/media_source_manager_test.cpp index 59afca7d..a7fd3907 100644 --- a/cmvr-es/manager/media_source_hub/tests/media_source_hub_test.cpp +++ b/cmvr-es/manager/media_source_manager/tests/media_source_manager_test.cpp @@ -1,5 +1,5 @@ -#include "manager/media_source_hub/include/media_source_hub.h" -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "manager/media_source_manager/include/media_source_manager.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" #include #include @@ -20,7 +20,7 @@ using cmvr::media::Codec; using cmvr::media::MediaFrame; using cmvr::media::MediaFramePtr; using cmvr::media::MediaKind; -using cmvr::media::MediaSourceHub; +using cmvr::media::MediaSourceManager; using cmvr::media::PayloadFormat; using cmvr::media::Rational; using cmvr::media::TrackDescriptor; @@ -349,17 +349,17 @@ void testBroadcastConcurrency() { } void testHubLifecycleAndDescriptorRefresh() { - MediaSourceHub hub; + MediaSourceManager hub; const auto initial_descriptor = makeVideoDescriptor(Codec::UNKNOWN, 1); std::atomic start_count{0}; std::atomic stop_count{0}; std::atomic key_frame_requests{0}; std::mutex sink_mutex; - MediaSourceHub::FrameSink sink; + MediaSourceManager::FrameSink sink; - MediaSourceHub::SourceCallbacks callbacks; - callbacks.start = [&](const MediaSourceHub::FrameSink& callback_sink, - const MediaSourceHub::CancelPredicate&) { + MediaSourceManager::SourceCallbacks callbacks; + callbacks.start = [&](const MediaSourceManager::FrameSink& callback_sink, + const MediaSourceManager::CancelPredicate&) { { std::lock_guard lock(sink_mutex); sink = callback_sink; @@ -394,7 +394,7 @@ void testHubLifecycleAndDescriptorRefresh() { // Content changes at the same generation must atomically replace the initial descriptor. const auto actual_descriptor = makeVideoDescriptor(Codec::H264, 1, {0, 0, 0, 1, 0x67}); - MediaSourceHub::FrameSink producer; + MediaSourceManager::FrameSink producer; { std::lock_guard lock(sink_mutex); producer = sink; @@ -429,14 +429,14 @@ void testHubLifecycleAndDescriptorRefresh() { } void testSubscriptionDiscardPending() { - MediaSourceHub hub; + MediaSourceManager hub; const auto descriptor = makeVideoDescriptor(Codec::H264, 1); std::mutex sink_mutex; - MediaSourceHub::FrameSink sink; + MediaSourceManager::FrameSink sink; - MediaSourceHub::SourceCallbacks callbacks; - callbacks.start = [&](const MediaSourceHub::FrameSink& callback_sink, - const MediaSourceHub::CancelPredicate&) { + MediaSourceManager::SourceCallbacks callbacks; + callbacks.start = [&](const MediaSourceManager::FrameSink& callback_sink, + const MediaSourceManager::CancelPredicate&) { std::lock_guard lock(sink_mutex); sink = callback_sink; return true; @@ -450,7 +450,7 @@ void testSubscriptionDiscardPending() { auto subscription = hub.subscribe(descriptor->id); CHECK_TRUE(subscription.valid()); - MediaSourceHub::FrameSink producer; + MediaSourceManager::FrameSink producer; { std::lock_guard lock(sink_mutex); producer = sink; @@ -471,13 +471,13 @@ void testSubscriptionDiscardPending() { } void testHubFailedStartAndShutdown() { - MediaSourceHub hub; + MediaSourceManager hub; const auto descriptor = makeVideoDescriptor(Codec::UNKNOWN, 1); std::atomic start_attempts{0}; std::atomic retry_stop_count{0}; - MediaSourceHub::SourceCallbacks failed_callbacks; - failed_callbacks.start = [&](const MediaSourceHub::FrameSink&, - const MediaSourceHub::CancelPredicate&) { + MediaSourceManager::SourceCallbacks failed_callbacks; + failed_callbacks.start = [&](const MediaSourceManager::FrameSink&, + const MediaSourceManager::CancelPredicate&) { return ++start_attempts >= 2; }; failed_callbacks.stop = [&] { ++retry_stop_count; }; @@ -492,9 +492,9 @@ void testHubFailedStartAndShutdown() { CHECK_TRUE(hub.unregisterSource(descriptor->id)); std::atomic stop_count{0}; - MediaSourceHub::SourceCallbacks callbacks; - callbacks.start = [](const MediaSourceHub::FrameSink&, - const MediaSourceHub::CancelPredicate&) { + MediaSourceManager::SourceCallbacks callbacks; + callbacks.start = [](const MediaSourceManager::FrameSink&, + const MediaSourceManager::CancelPredicate&) { return true; }; callbacks.stop = [&] { ++stop_count; }; @@ -508,13 +508,13 @@ void testHubFailedStartAndShutdown() { } void testHubStopAllSourcesAllowsReregistration() { - MediaSourceHub hub; + MediaSourceManager hub; const auto first_descriptor = makeVideoDescriptor(Codec::H264, 1); std::atomic first_stop_count{0}; - MediaSourceHub::SourceCallbacks first_callbacks; - first_callbacks.start = [](const MediaSourceHub::FrameSink&, - const MediaSourceHub::CancelPredicate&) { + MediaSourceManager::SourceCallbacks first_callbacks; + first_callbacks.start = [](const MediaSourceManager::FrameSink&, + const MediaSourceManager::CancelPredicate&) { return true; }; first_callbacks.stop = [&] { ++first_stop_count; }; @@ -538,9 +538,9 @@ void testHubStopAllSourcesAllowsReregistration() { const auto second_descriptor = makeVideoDescriptor(Codec::H264, 2); std::atomic second_start_count{0}; std::atomic second_stop_count{0}; - MediaSourceHub::SourceCallbacks second_callbacks; - second_callbacks.start = [&](const MediaSourceHub::FrameSink&, - const MediaSourceHub::CancelPredicate&) { + MediaSourceManager::SourceCallbacks second_callbacks; + second_callbacks.start = [&](const MediaSourceManager::FrameSink&, + const MediaSourceManager::CancelPredicate&) { ++second_start_count; return true; }; @@ -559,13 +559,13 @@ void testHubStopAllSourcesAllowsReregistration() { } void testStopAllSourcesReportsAndRetriesUnconfirmedStop() { - MediaSourceHub hub; + MediaSourceManager hub; const auto descriptor = makeVideoDescriptor(Codec::H264, 1); std::atomic stop_attempts{0}; - MediaSourceHub::SourceCallbacks callbacks; - callbacks.start = [](const MediaSourceHub::FrameSink&, - const MediaSourceHub::CancelPredicate&) { + MediaSourceManager::SourceCallbacks callbacks; + callbacks.start = [](const MediaSourceManager::FrameSink&, + const MediaSourceManager::CancelPredicate&) { return true; }; callbacks.stop_confirmed = [&] { @@ -590,7 +590,7 @@ void testStopAllSourcesReportsAndRetriesUnconfirmedStop() { } void testStopSourcesForDeviceIsSelectiveAndRetriesFailures() { - MediaSourceHub hub; + MediaSourceManager hub; const auto front_video = makeVideoDescriptor( Codec::H264, 1, {}, "front.video", "camera.front"); const auto front_depth = makeVideoDescriptor( @@ -604,10 +604,10 @@ void testStopSourcesForDeviceIsSelectiveAndRetriesFailures() { auto register_source = [&]( const TrackDescriptorPtr& descriptor, std::function stop_confirmed) { - MediaSourceHub::SourceCallbacks callbacks; + MediaSourceManager::SourceCallbacks callbacks; callbacks.start = []( - const MediaSourceHub::FrameSink&, - const MediaSourceHub::CancelPredicate&) { return true; }; + const MediaSourceManager::FrameSink&, + const MediaSourceManager::CancelPredicate&) { return true; }; callbacks.stop_confirmed = std::move(stop_confirmed); return hub.registerSource(descriptor, std::move(callbacks), 2); }; @@ -665,7 +665,7 @@ void testStopSourcesForDeviceIsSelectiveAndRetriesFailures() { } void testDeviceStopsRunConcurrentlyAndSerializeMatchingRegistration() { - MediaSourceHub hub; + MediaSourceManager hub; const auto first = makeVideoDescriptor( Codec::H264, 1, {}, "first.video", "camera.first"); const auto second = makeVideoDescriptor( @@ -677,10 +677,10 @@ void testDeviceStopsRunConcurrentlyAndSerializeMatchingRegistration() { auto register_blocking_source = [&]( const TrackDescriptorPtr& descriptor, std::atomic& entered) { - MediaSourceHub::SourceCallbacks callbacks; + MediaSourceManager::SourceCallbacks callbacks; callbacks.start = []( - const MediaSourceHub::FrameSink&, - const MediaSourceHub::CancelPredicate&) { return true; }; + const MediaSourceManager::FrameSink&, + const MediaSourceManager::CancelPredicate&) { return true; }; callbacks.stop = [&entered, &release_stops] { entered.store(true, std::memory_order_release); while (!release_stops.load(std::memory_order_acquire)) { @@ -720,10 +720,10 @@ void testDeviceStopsRunConcurrentlyAndSerializeMatchingRegistration() { } CHECK_TRUE(second_stop_entered.load(std::memory_order_acquire)); - MediaSourceHub::SourceCallbacks replacement_callbacks; + MediaSourceManager::SourceCallbacks replacement_callbacks; replacement_callbacks.start = []( - const MediaSourceHub::FrameSink&, - const MediaSourceHub::CancelPredicate&) { return true; }; + const MediaSourceManager::FrameSink&, + const MediaSourceManager::CancelPredicate&) { return true; }; replacement_callbacks.stop = [] {}; auto matching_registration = std::async(std::launch::async, [&] { return hub.registerSource( @@ -760,7 +760,7 @@ void testDeviceStopsRunConcurrentlyAndSerializeMatchingRegistration() { } void testStopAllWaitsForDeviceStopAndRetainsItsConcurrentRegistrationRule() { - MediaSourceHub hub; + MediaSourceManager hub; const auto first = makeVideoDescriptor( Codec::H264, 1, {}, "first.video", "camera.first"); const auto other = makeVideoDescriptor( @@ -769,10 +769,10 @@ void testStopAllWaitsForDeviceStopAndRetainsItsConcurrentRegistrationRule() { std::atomic release_first_stop{false}; std::atomic other_stops{0}; - MediaSourceHub::SourceCallbacks first_callbacks; + MediaSourceManager::SourceCallbacks first_callbacks; first_callbacks.start = []( - const MediaSourceHub::FrameSink&, - const MediaSourceHub::CancelPredicate&) { return true; }; + const MediaSourceManager::FrameSink&, + const MediaSourceManager::CancelPredicate&) { return true; }; first_callbacks.stop = [&] { first_stop_entered.store(true, std::memory_order_release); while (!release_first_stop.load(std::memory_order_acquire)) { @@ -798,10 +798,10 @@ void testStopAllWaitsForDeviceStopAndRetainsItsConcurrentRegistrationRule() { }); CHECK_TRUE(stop_all.wait_for(20ms) == std::future_status::timeout); - MediaSourceHub::SourceCallbacks other_callbacks; + MediaSourceManager::SourceCallbacks other_callbacks; other_callbacks.start = []( - const MediaSourceHub::FrameSink&, - const MediaSourceHub::CancelPredicate&) { return true; }; + const MediaSourceManager::FrameSink&, + const MediaSourceManager::CancelPredicate&) { return true; }; other_callbacks.stop = [&] { ++other_stops; }; CHECK_TRUE(hub.registerSource(other, std::move(other_callbacks), 2)); auto other_subscription = hub.subscribe(other->id); @@ -824,15 +824,15 @@ void testStopAllWaitsForDeviceStopAndRetainsItsConcurrentRegistrationRule() { } void testConcurrentRegistrationWaitsForStopAllSources() { - MediaSourceHub hub; + MediaSourceManager hub; const auto descriptor = makeVideoDescriptor(Codec::H264, 1); std::atomic stop_entered{false}; std::atomic release_stop{false}; std::atomic old_stop_count{0}; - MediaSourceHub::SourceCallbacks old_callbacks; - old_callbacks.start = [](const MediaSourceHub::FrameSink&, - const MediaSourceHub::CancelPredicate&) { + MediaSourceManager::SourceCallbacks old_callbacks; + old_callbacks.start = [](const MediaSourceManager::FrameSink&, + const MediaSourceManager::CancelPredicate&) { return true; }; old_callbacks.stop = [&] { @@ -856,9 +856,9 @@ void testConcurrentRegistrationWaitsForStopAllSources() { CHECK_TRUE(stop_entered.load(std::memory_order_acquire)); std::atomic new_start_count{0}; - MediaSourceHub::SourceCallbacks new_callbacks; - new_callbacks.start = [&](const MediaSourceHub::FrameSink&, - const MediaSourceHub::CancelPredicate&) { + MediaSourceManager::SourceCallbacks new_callbacks; + new_callbacks.start = [&](const MediaSourceManager::FrameSink&, + const MediaSourceManager::CancelPredicate&) { ++new_start_count; return true; }; @@ -889,7 +889,7 @@ void testConcurrentRegistrationWaitsForStopAllSources() { void testSystemStopAllAdmissionFencesRegistrationAndStartup() { cmvr::service::StopAllAdmissionGate admission_gate; - MediaSourceHub hub(&admission_gate); + MediaSourceManager hub(&admission_gate); const auto dormant = makeVideoDescriptor( Codec::H264, 1, {}, "dormant.video", "camera.dormant"); const auto new_source = makeVideoDescriptor( @@ -897,10 +897,10 @@ void testSystemStopAllAdmissionFencesRegistrationAndStartup() { std::atomic dormant_starts{0}; std::atomic new_starts{0}; - MediaSourceHub::SourceCallbacks dormant_callbacks; + MediaSourceManager::SourceCallbacks dormant_callbacks; dormant_callbacks.start = [&]( - const MediaSourceHub::FrameSink&, - const MediaSourceHub::CancelPredicate&) { + const MediaSourceManager::FrameSink&, + const MediaSourceManager::CancelPredicate&) { ++dormant_starts; return true; }; @@ -911,10 +911,10 @@ void testSystemStopAllAdmissionFencesRegistrationAndStartup() { const auto stop_ticket = admission_gate.beginStopAll(); CHECK_TRUE(stop_ticket.valid()); - MediaSourceHub::SourceCallbacks rejected_callbacks; + MediaSourceManager::SourceCallbacks rejected_callbacks; rejected_callbacks.start = [&]( - const MediaSourceHub::FrameSink&, - const MediaSourceHub::CancelPredicate&) { + const MediaSourceManager::FrameSink&, + const MediaSourceManager::CancelPredicate&) { ++new_starts; return true; }; @@ -928,10 +928,10 @@ void testSystemStopAllAdmissionFencesRegistrationAndStartup() { CHECK_TRUE(admission_gate.finishStopAll(stop_ticket, true)); - MediaSourceHub::SourceCallbacks recovered_callbacks; + MediaSourceManager::SourceCallbacks recovered_callbacks; recovered_callbacks.start = [&]( - const MediaSourceHub::FrameSink&, - const MediaSourceHub::CancelPredicate&) { + const MediaSourceManager::FrameSink&, + const MediaSourceManager::CancelPredicate&) { ++new_starts; return true; }; @@ -949,7 +949,7 @@ void testSystemStopAllAdmissionFencesRegistrationAndStartup() { void testSystemStopAllRejectsRegistrationWaitingForLocalStop() { cmvr::service::StopAllAdmissionGate admission_gate; - MediaSourceHub hub(&admission_gate); + MediaSourceManager hub(&admission_gate); const auto old_source = makeVideoDescriptor( Codec::H264, 1, {}, "old.video", "camera.shared"); const auto replacement = makeVideoDescriptor( @@ -957,10 +957,10 @@ void testSystemStopAllRejectsRegistrationWaitingForLocalStop() { std::atomic stop_entered{false}; std::atomic release_stop{false}; - MediaSourceHub::SourceCallbacks old_callbacks; + MediaSourceManager::SourceCallbacks old_callbacks; old_callbacks.start = []( - const MediaSourceHub::FrameSink&, - const MediaSourceHub::CancelPredicate&) { return true; }; + const MediaSourceManager::FrameSink&, + const MediaSourceManager::CancelPredicate&) { return true; }; old_callbacks.stop = [&] { stop_entered.store(true, std::memory_order_release); while (!release_stop.load(std::memory_order_acquire)) { @@ -983,10 +983,10 @@ void testSystemStopAllRejectsRegistrationWaitingForLocalStop() { CHECK_TRUE(stop_entered.load(std::memory_order_acquire)); auto make_replacement_callbacks = [] { - MediaSourceHub::SourceCallbacks callbacks; + MediaSourceManager::SourceCallbacks callbacks; callbacks.start = []( - const MediaSourceHub::FrameSink&, - const MediaSourceHub::CancelPredicate&) { return true; }; + const MediaSourceManager::FrameSink&, + const MediaSourceManager::CancelPredicate&) { return true; }; callbacks.stop = [] {}; return callbacks; }; @@ -1021,17 +1021,17 @@ void testSystemStopAllRejectsRegistrationWaitingForLocalStop() { void testSystemStopAllRejectsSubscriptionWaitingForLocalStop() { cmvr::service::StopAllAdmissionGate admission_gate; - MediaSourceHub hub(&admission_gate); + MediaSourceManager hub(&admission_gate); const auto descriptor = makeVideoDescriptor( Codec::H264, 1, {}, "waiting.video", "camera.waiting"); std::atomic stop_entered{false}; std::atomic release_stop{false}; std::atomic starts{0}; - MediaSourceHub::SourceCallbacks callbacks; + MediaSourceManager::SourceCallbacks callbacks; callbacks.start = [&]( - const MediaSourceHub::FrameSink&, - const MediaSourceHub::CancelPredicate&) { + const MediaSourceManager::FrameSink&, + const MediaSourceManager::CancelPredicate&) { ++starts; return true; }; @@ -1084,15 +1084,15 @@ void testSystemStopAllRejectsSubscriptionWaitingForLocalStop() { } void testStopAllSourcesCancelsStartingSourceBeforeReuse() { - MediaSourceHub hub; + MediaSourceManager hub; const auto descriptor = makeVideoDescriptor(Codec::UNKNOWN, 1); std::atomic old_start_entered{false}; std::atomic release_old_start{false}; std::atomic old_stop_count{0}; - MediaSourceHub::SourceCallbacks old_callbacks; - old_callbacks.start = [&](const MediaSourceHub::FrameSink&, - const MediaSourceHub::CancelPredicate& cancelled) { + MediaSourceManager::SourceCallbacks old_callbacks; + old_callbacks.start = [&](const MediaSourceManager::FrameSink&, + const MediaSourceManager::CancelPredicate& cancelled) { old_start_entered.store(true, std::memory_order_release); while (!release_old_start.load(std::memory_order_acquire)) { if (cancelled()) { @@ -1134,9 +1134,9 @@ void testStopAllSourcesCancelsStartingSourceBeforeReuse() { CHECK_TRUE(hub.stopAllSources()); std::atomic new_start_count{0}; - MediaSourceHub::SourceCallbacks new_callbacks; - new_callbacks.start = [&](const MediaSourceHub::FrameSink&, - const MediaSourceHub::CancelPredicate&) { + MediaSourceManager::SourceCallbacks new_callbacks; + new_callbacks.start = [&](const MediaSourceManager::FrameSink&, + const MediaSourceManager::CancelPredicate&) { ++new_start_count; return true; }; @@ -1150,15 +1150,15 @@ void testStopAllSourcesCancelsStartingSourceBeforeReuse() { } void testKeyFrameRequestIsOrderedBeforeStop() { - MediaSourceHub hub; + MediaSourceManager hub; const auto descriptor = makeVideoDescriptor(Codec::H264, 1); std::atomic key_frame_entered{false}; std::atomic release_key_frame{false}; std::atomic stop_count{0}; - MediaSourceHub::SourceCallbacks callbacks; - callbacks.start = [](const MediaSourceHub::FrameSink&, - const MediaSourceHub::CancelPredicate&) { + MediaSourceManager::SourceCallbacks callbacks; + callbacks.start = [](const MediaSourceManager::FrameSink&, + const MediaSourceManager::CancelPredicate&) { return true; }; callbacks.stop = [&] { ++stop_count; }; @@ -1196,14 +1196,14 @@ void testKeyFrameRequestIsOrderedBeforeStop() { } void testHubCancelsBlockedStartWithoutBlockingShutdown() { - MediaSourceHub hub; + MediaSourceManager hub; const auto descriptor = makeVideoDescriptor(Codec::UNKNOWN, 1); std::atomic start_entered{false}; std::atomic start_exited{false}; - MediaSourceHub::SourceCallbacks callbacks; - callbacks.start = [&](const MediaSourceHub::FrameSink&, - const MediaSourceHub::CancelPredicate& cancelled) { + MediaSourceManager::SourceCallbacks callbacks; + callbacks.start = [&](const MediaSourceManager::FrameSink&, + const MediaSourceManager::CancelPredicate& cancelled) { start_entered.store(true, std::memory_order_release); while (!cancelled()) { std::this_thread::sleep_for(2ms); @@ -1246,16 +1246,16 @@ void testHubCancelsBlockedStartWithoutBlockingShutdown() { } void testHubQuarantinesNonCooperativeStart() { - MediaSourceHub hub; + MediaSourceManager hub; const auto descriptor = makeVideoDescriptor(Codec::UNKNOWN, 1); std::atomic start_entered{false}; std::atomic release_start{false}; std::atomic start_exited{false}; std::atomic stop_count{0}; - MediaSourceHub::SourceCallbacks callbacks; - callbacks.start = [&](const MediaSourceHub::FrameSink&, - const MediaSourceHub::CancelPredicate&) { + MediaSourceManager::SourceCallbacks callbacks; + callbacks.start = [&](const MediaSourceManager::FrameSink&, + const MediaSourceManager::CancelPredicate&) { start_entered.store(true, std::memory_order_release); while (!release_start.load(std::memory_order_acquire)) { std::this_thread::sleep_for(2ms); @@ -1330,9 +1330,9 @@ int main() { testHubQuarantinesNonCooperativeStart(); if (failures != 0) { - std::cerr << failures << " media_source_hub checks failed\n"; + std::cerr << failures << " media_source_manager checks failed\n"; return 1; } - std::cout << "media_source_hub self-test passed\n"; + std::cout << "media_source_manager self-test passed\n"; return 0; } diff --git a/cmvr-es/manager/safety/CMakeLists.txt b/cmvr-es/manager/safety_manager/CMakeLists.txt similarity index 58% rename from cmvr-es/manager/safety/CMakeLists.txt rename to cmvr-es/manager/safety_manager/CMakeLists.txt index e63a7d57..f647fb1e 100644 --- a/cmvr-es/manager/safety/CMakeLists.txt +++ b/cmvr-es/manager/safety_manager/CMakeLists.txt @@ -1,28 +1,28 @@ -add_library(safety_coordinator STATIC +add_library(safety_manager STATIC src/command_ledger.cpp - src/safety_coordinator.cpp + src/safety_manager.cpp src/safety_reason.cpp src/safety_snapshot_store.cpp ) -target_include_directories(safety_coordinator PUBLIC +target_include_directories(safety_manager PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/cmvr-es ) -target_link_libraries(safety_coordinator PUBLIC - cmvr_es::control_authority +target_link_libraries(safety_manager PUBLIC + cmvr_es::control_authority_manager ) -add_library(cmvr_es::safety_coordinator ALIAS safety_coordinator) -install(TARGETS safety_coordinator LIBRARY DESTINATION lib) +add_library(cmvr_es::safety_manager ALIAS safety_manager) +install(TARGETS safety_manager LIBRARY DESTINATION lib) if(BUILD_TESTING) add_executable(safety_snapshot_store_test tests/safety_snapshot_store_test.cpp ) target_link_libraries(safety_snapshot_store_test PRIVATE - cmvr_es::safety_coordinator + cmvr_es::safety_manager gtest gtest_main pthread @@ -37,7 +37,7 @@ if(BUILD_TESTING) tests/command_ledger_test.cpp ) target_link_libraries(command_ledger_test PRIVATE - cmvr_es::safety_coordinator + cmvr_es::safety_manager gtest gtest_main pthread @@ -48,18 +48,18 @@ if(BUILD_TESTING) ) set_tests_properties(command_ledger_test PROPERTIES TIMEOUT 10) - add_executable(safety_coordinator_test - tests/safety_coordinator_test.cpp + add_executable(safety_manager_test + tests/safety_manager_test.cpp ) - target_link_libraries(safety_coordinator_test PRIVATE - cmvr_es::safety_coordinator + target_link_libraries(safety_manager_test PRIVATE + cmvr_es::safety_manager gtest gtest_main pthread ) add_test( - NAME safety_coordinator_test - COMMAND safety_coordinator_test + NAME safety_manager_test + COMMAND safety_manager_test ) - set_tests_properties(safety_coordinator_test PROPERTIES TIMEOUT 15) + set_tests_properties(safety_manager_test PROPERTIES TIMEOUT 15) endif() diff --git a/cmvr-es/manager/safety/include/command_ledger.h b/cmvr-es/manager/safety_manager/include/command_ledger.h similarity index 98% rename from cmvr-es/manager/safety/include/command_ledger.h rename to cmvr-es/manager/safety_manager/include/command_ledger.h index deeeb37b..f47a7214 100644 --- a/cmvr-es/manager/safety/include/command_ledger.h +++ b/cmvr-es/manager/safety_manager/include/command_ledger.h @@ -9,7 +9,7 @@ #include #include -#include "manager/safety/include/safety_types.h" +#include "manager/safety_manager/include/safety_types.h" namespace cmvr::safety { diff --git a/cmvr-es/manager/safety/include/device_safety_endpoint.h b/cmvr-es/manager/safety_manager/include/device_safety_endpoint.h similarity index 95% rename from cmvr-es/manager/safety/include/device_safety_endpoint.h rename to cmvr-es/manager/safety_manager/include/device_safety_endpoint.h index 9d743683..836ca6b8 100644 --- a/cmvr-es/manager/safety/include/device_safety_endpoint.h +++ b/cmvr-es/manager/safety_manager/include/device_safety_endpoint.h @@ -3,7 +3,7 @@ #include #include -#include "manager/safety/include/safety_types.h" +#include "manager/safety_manager/include/safety_types.h" namespace cmvr::safety { diff --git a/cmvr-es/manager/safety/include/safety_coordinator.h b/cmvr-es/manager/safety_manager/include/safety_manager.h similarity index 89% rename from cmvr-es/manager/safety/include/safety_coordinator.h rename to cmvr-es/manager/safety_manager/include/safety_manager.h index 55179b0d..1ea4c982 100644 --- a/cmvr-es/manager/safety/include/safety_coordinator.h +++ b/cmvr-es/manager/safety_manager/include/safety_manager.h @@ -10,14 +10,14 @@ #include #include -#include "manager/safety/include/command_ledger.h" -#include "manager/safety/include/device_safety_endpoint.h" -#include "manager/safety/include/safety_participant.h" -#include "manager/safety/include/safety_snapshot_store.h" +#include "manager/safety_manager/include/command_ledger.h" +#include "manager/safety_manager/include/device_safety_endpoint.h" +#include "manager/safety_manager/include/safety_participant.h" +#include "manager/safety_manager/include/safety_snapshot_store.h" namespace cmvr::safety { -struct SafetyCoordinatorConfig { +struct SafetyManagerConfig { EnforcementMode enforcement_mode{EnforcementMode::Shadow}; std::unordered_set enforced_device_ids; std::chrono::milliseconds stop_all_timeout{15000}; @@ -72,7 +72,7 @@ struct ParticipantSafetyStateView { ParticipantResultView last_release; }; -struct SafetyCoordinatorSnapshot { +struct SafetyManagerSnapshot { SystemAdmissionState system_state{SystemAdmissionState::Starting}; std::uint64_t safety_epoch{0}; std::string service_instance_id; @@ -135,7 +135,7 @@ struct RecoveryResult { std::vector targets; }; -class SafetyCoordinator; +class SafetyManager; class DispatchGuard final { public: @@ -153,23 +153,23 @@ public: } private: - friend class SafetyCoordinator; - DispatchGuard(SafetyCoordinator* coordinator, + friend class SafetyManager; + DispatchGuard(SafetyManager* coordinator, std::string device_id, HardwareCheckResult hardware_check) noexcept; void reset_() noexcept; - SafetyCoordinator* coordinator_{nullptr}; + SafetyManager* coordinator_{nullptr}; std::string device_id_; HardwareCheckResult hardware_check_; }; -class SafetyCoordinator final { +class SafetyManager final { public: - explicit SafetyCoordinator(SafetyCoordinatorConfig config = {}); - ~SafetyCoordinator(); - SafetyCoordinator(const SafetyCoordinator&) = delete; - SafetyCoordinator& operator=(const SafetyCoordinator&) = delete; + explicit SafetyManager(SafetyManagerConfig config = {}); + ~SafetyManager(); + SafetyManager(const SafetyManager&) = delete; + SafetyManager& operator=(const SafetyManager&) = delete; bool registerDevice(DeviceSafetyRegistration registration); bool unregisterDevice(const std::string& device_id); @@ -205,13 +205,13 @@ public: SafetyClock::time_point deadline = SafetyClock::time_point::max()); RecoveryResult recover(const RecoveryRequest& request); - SafetyCoordinatorSnapshot snapshot() const; + SafetyManagerSnapshot snapshot() const; SafetySnapshotStore& snapshotStore() noexcept; const SafetySnapshotStore& snapshotStore() const noexcept; CommandLedger& commandLedger() noexcept; const CommandLedger& commandLedger() const noexcept; const std::string& serviceInstanceId() const noexcept; - const SafetyCoordinatorConfig& config() const noexcept; + const SafetyManagerConfig& config() const noexcept; private: friend class DispatchGuard; diff --git a/cmvr-es/manager/safety/include/safety_participant.h b/cmvr-es/manager/safety_manager/include/safety_participant.h similarity index 97% rename from cmvr-es/manager/safety/include/safety_participant.h rename to cmvr-es/manager/safety_manager/include/safety_participant.h index 69072164..1a4557ce 100644 --- a/cmvr-es/manager/safety/include/safety_participant.h +++ b/cmvr-es/manager/safety_manager/include/safety_participant.h @@ -5,7 +5,7 @@ #include #include -#include "manager/safety/include/safety_types.h" +#include "manager/safety_manager/include/safety_types.h" namespace cmvr::safety { diff --git a/cmvr-es/manager/safety/include/safety_reason.h b/cmvr-es/manager/safety_manager/include/safety_reason.h similarity index 100% rename from cmvr-es/manager/safety/include/safety_reason.h rename to cmvr-es/manager/safety_manager/include/safety_reason.h diff --git a/cmvr-es/manager/safety/include/safety_snapshot_store.h b/cmvr-es/manager/safety_manager/include/safety_snapshot_store.h similarity index 96% rename from cmvr-es/manager/safety/include/safety_snapshot_store.h rename to cmvr-es/manager/safety_manager/include/safety_snapshot_store.h index b2871eaa..b52c1c4a 100644 --- a/cmvr-es/manager/safety/include/safety_snapshot_store.h +++ b/cmvr-es/manager/safety_manager/include/safety_snapshot_store.h @@ -7,7 +7,7 @@ #include #include -#include "manager/safety/include/safety_types.h" +#include "manager/safety_manager/include/safety_types.h" namespace cmvr::safety { diff --git a/cmvr-es/manager/safety/include/safety_types.h b/cmvr-es/manager/safety_manager/include/safety_types.h similarity index 99% rename from cmvr-es/manager/safety/include/safety_types.h rename to cmvr-es/manager/safety_manager/include/safety_types.h index 66144b62..743629bd 100644 --- a/cmvr-es/manager/safety/include/safety_types.h +++ b/cmvr-es/manager/safety_manager/include/safety_types.h @@ -7,7 +7,7 @@ #include #include "devices/device_types.h" -#include "manager/safety/include/safety_reason.h" +#include "manager/safety_manager/include/safety_reason.h" namespace cmvr::safety { diff --git a/cmvr-es/manager/safety/src/command_ledger.cpp b/cmvr-es/manager/safety_manager/src/command_ledger.cpp similarity index 99% rename from cmvr-es/manager/safety/src/command_ledger.cpp rename to cmvr-es/manager/safety_manager/src/command_ledger.cpp index e4c6e790..95a28681 100644 --- a/cmvr-es/manager/safety/src/command_ledger.cpp +++ b/cmvr-es/manager/safety_manager/src/command_ledger.cpp @@ -1,4 +1,4 @@ -#include "manager/safety/include/command_ledger.h" +#include "manager/safety_manager/include/command_ledger.h" #include #include diff --git a/cmvr-es/manager/safety/src/safety_coordinator.cpp b/cmvr-es/manager/safety_manager/src/safety_manager.cpp similarity index 97% rename from cmvr-es/manager/safety/src/safety_coordinator.cpp rename to cmvr-es/manager/safety_manager/src/safety_manager.cpp index fb0c012e..bbb31eeb 100644 --- a/cmvr-es/manager/safety/src/safety_coordinator.cpp +++ b/cmvr-es/manager/safety_manager/src/safety_manager.cpp @@ -1,4 +1,4 @@ -#include "manager/safety/include/safety_coordinator.h" +#include "manager/safety_manager/include/safety_manager.h" #include #include @@ -187,10 +187,10 @@ int phaseRank(const ParticipantPhase phase) noexcept } // namespace -struct SafetyCoordinator::Impl { +struct SafetyManager::Impl { struct PublisherBinding { std::atomic active{true}; - SafetyCoordinator* coordinator{nullptr}; + SafetyManager* coordinator{nullptr}; }; struct DeviceSlot { @@ -240,7 +240,7 @@ struct SafetyCoordinator::Impl { RecoveryResult result; }; - explicit Impl(SafetyCoordinatorConfig source) + explicit Impl(SafetyManagerConfig source) : config(std::move(source)), ledger(config.command_ledger), service_instance_id(makeInstanceId()), @@ -249,7 +249,7 @@ struct SafetyCoordinator::Impl { if (config.stop_all_timeout <= std::chrono::milliseconds::zero() || config.recovery_timeout <= std::chrono::milliseconds::zero() || config.event_history_capacity == 0) { - throw std::invalid_argument("invalid SafetyCoordinatorConfig"); + throw std::invalid_argument("invalid SafetyManagerConfig"); } } @@ -339,7 +339,7 @@ struct SafetyCoordinator::Impl { return false; } - SafetyCoordinatorConfig config; + SafetyManagerConfig config; SafetySnapshotStore snapshots; CommandLedger ledger; const std::string service_instance_id; @@ -367,7 +367,7 @@ struct SafetyCoordinator::Impl { }; DispatchGuard::DispatchGuard( - SafetyCoordinator* coordinator, + SafetyManager* coordinator, std::string device_id, HardwareCheckResult hardware_check) noexcept : coordinator_(coordinator), @@ -408,12 +408,12 @@ void DispatchGuard::reset_() noexcept coordinator->endDispatch_(device_id_); } -SafetyCoordinator::SafetyCoordinator(SafetyCoordinatorConfig config) +SafetyManager::SafetyManager(SafetyManagerConfig config) : impl_(std::make_unique(std::move(config))) { } -SafetyCoordinator::~SafetyCoordinator() +SafetyManager::~SafetyManager() { beginShutdown(); std::vector> endpoints; @@ -436,7 +436,7 @@ SafetyCoordinator::~SafetyCoordinator() } } -bool SafetyCoordinator::registerDevice(DeviceSafetyRegistration registration) +bool SafetyManager::registerDevice(DeviceSafetyRegistration registration) { if (registration.descriptor.device_id.empty() || registration.descriptor.maximum_snapshot_age <= @@ -531,7 +531,7 @@ bool SafetyCoordinator::registerDevice(DeviceSafetyRegistration registration) return true; } -bool SafetyCoordinator::unregisterDevice(const std::string& device_id) +bool SafetyManager::unregisterDevice(const std::string& device_id) { std::shared_ptr endpoint; std::string participant_id; @@ -576,7 +576,7 @@ bool SafetyCoordinator::unregisterDevice(const std::string& device_id) return true; } -bool SafetyCoordinator::registerParticipant( +bool SafetyManager::registerParticipant( std::shared_ptr participant) { if (!participant) { @@ -597,7 +597,7 @@ bool SafetyCoordinator::registerParticipant( return true; } -bool SafetyCoordinator::unregisterParticipant( +bool SafetyManager::unregisterParticipant( const std::string& participant_id) { std::lock_guard lock(impl_->mutex); @@ -615,7 +615,7 @@ bool SafetyCoordinator::unregisterParticipant( return true; } -void SafetyCoordinator::updateDeviceRuntimeState( +void SafetyManager::updateDeviceRuntimeState( const std::string& device_id, const device::ManagedDeviceState lifecycle, device::DeviceHealthSnapshot health) @@ -633,7 +633,7 @@ void SafetyCoordinator::updateDeviceRuntimeState( impl_->state_changed.notify_all(); } -bool SafetyCoordinator::publishSafetySnapshot(DeviceSafetySnapshot snapshot) +bool SafetyManager::publishSafetySnapshot(DeviceSafetySnapshot snapshot) { const std::string device_id = snapshot.device_id; if (!impl_->snapshots.publish(std::move(snapshot))) { @@ -679,7 +679,7 @@ bool SafetyCoordinator::publishSafetySnapshot(DeviceSafetySnapshot snapshot) return true; } -std::optional SafetyCoordinator::advanceDeviceGeneration( +std::optional SafetyManager::advanceDeviceGeneration( const std::string& device_id) { const auto generation = impl_->snapshots.bumpGeneration(device_id); @@ -709,7 +709,7 @@ std::optional SafetyCoordinator::advanceDeviceGeneration( return generation; } -StartupCoverageResult SafetyCoordinator::validateStartupCoverage( +StartupCoverageResult SafetyManager::validateStartupCoverage( const SafetyClock::time_point deadline) { struct Target { @@ -844,7 +844,7 @@ StartupCoverageResult SafetyCoordinator::validateStartupCoverage( return result; } -void SafetyCoordinator::markStartupComplete() +void SafetyManager::markStartupComplete() { std::lock_guard lock(impl_->mutex); if (impl_->system_state != SystemAdmissionState::Starting) { @@ -863,7 +863,7 @@ void SafetyCoordinator::markStartupComplete() impl_->state_changed.notify_all(); } -void SafetyCoordinator::beginShutdown() noexcept +void SafetyManager::beginShutdown() noexcept { if (!impl_) { return; @@ -885,7 +885,7 @@ void SafetyCoordinator::beginShutdown() noexcept } } -AdmissionDecision SafetyCoordinator::evaluate( +AdmissionDecision SafetyManager::evaluate( const AdmissionRequest& request) const { AdmissionDecision decision; @@ -1039,7 +1039,7 @@ AdmissionDecision SafetyCoordinator::evaluate( return allow(); } -AdmissionResult SafetyCoordinator::admit(const AdmissionRequest& request) +AdmissionResult SafetyManager::admit(const AdmissionRequest& request) { AdmissionResult result; result.decision = evaluate(request); @@ -1060,7 +1060,7 @@ AdmissionResult SafetyCoordinator::admit(const AdmissionRequest& request) return result; } -HardwareCheckResult SafetyCoordinator::revalidatePermit( +HardwareCheckResult SafetyManager::revalidatePermit( const AdmissionPermit& permit) const { const auto rejected = [](const SafetyReason reason, std::string detail) { @@ -1114,7 +1114,7 @@ HardwareCheckResult SafetyCoordinator::revalidatePermit( return {true, SafetyReason::None, {}}; } -DispatchGuard SafetyCoordinator::beginDispatch( +DispatchGuard SafetyManager::beginDispatch( const AdmissionPermit& permit) { const auto rejected = [&permit]( @@ -1205,7 +1205,7 @@ DispatchGuard SafetyCoordinator::beginDispatch( return DispatchGuard(this, permit.device_id, std::move(hardware_check)); } -void SafetyCoordinator::endDispatch_(const std::string& device_id) noexcept +void SafetyManager::endDispatch_(const std::string& device_id) noexcept { try { std::lock_guard lock(impl_->mutex); @@ -1219,7 +1219,7 @@ void SafetyCoordinator::endDispatch_(const std::string& device_id) noexcept } } -void SafetyCoordinator::quarantineDevice( +void SafetyManager::quarantineDevice( const std::string& device_id, const SafetyReason reason, std::string operation_id) @@ -1245,7 +1245,7 @@ void SafetyCoordinator::quarantineDevice( impl_->state_changed.notify_all(); } -StopAllResult SafetyCoordinator::stopAll( +StopAllResult SafetyManager::stopAll( std::string operation_id, SafetyClock::time_point deadline) { @@ -1754,7 +1754,7 @@ StopAllResult SafetyCoordinator::stopAll( return result; } -RecoveryResult SafetyCoordinator::recover(const RecoveryRequest& request) +RecoveryResult SafetyManager::recover(const RecoveryRequest& request) { RecoveryResult invalid; invalid.recovery_id = request.recovery_id; @@ -2323,9 +2323,9 @@ RecoveryResult SafetyCoordinator::recover(const RecoveryRequest& request) return result; } -SafetyCoordinatorSnapshot SafetyCoordinator::snapshot() const +SafetyManagerSnapshot SafetyManager::snapshot() const { - SafetyCoordinatorSnapshot result; + SafetyManagerSnapshot result; std::lock_guard lock(impl_->mutex); result.system_state = impl_->system_state; result.safety_epoch = impl_->safety_epoch; @@ -2376,32 +2376,32 @@ SafetyCoordinatorSnapshot SafetyCoordinator::snapshot() const return result; } -SafetySnapshotStore& SafetyCoordinator::snapshotStore() noexcept +SafetySnapshotStore& SafetyManager::snapshotStore() noexcept { return impl_->snapshots; } -const SafetySnapshotStore& SafetyCoordinator::snapshotStore() const noexcept +const SafetySnapshotStore& SafetyManager::snapshotStore() const noexcept { return impl_->snapshots; } -CommandLedger& SafetyCoordinator::commandLedger() noexcept +CommandLedger& SafetyManager::commandLedger() noexcept { return impl_->ledger; } -const CommandLedger& SafetyCoordinator::commandLedger() const noexcept +const CommandLedger& SafetyManager::commandLedger() const noexcept { return impl_->ledger; } -const std::string& SafetyCoordinator::serviceInstanceId() const noexcept +const std::string& SafetyManager::serviceInstanceId() const noexcept { return impl_->service_instance_id; } -const SafetyCoordinatorConfig& SafetyCoordinator::config() const noexcept +const SafetyManagerConfig& SafetyManager::config() const noexcept { return impl_->config; } diff --git a/cmvr-es/manager/safety/src/safety_reason.cpp b/cmvr-es/manager/safety_manager/src/safety_reason.cpp similarity index 98% rename from cmvr-es/manager/safety/src/safety_reason.cpp rename to cmvr-es/manager/safety_manager/src/safety_reason.cpp index 14a9717b..87e22e39 100644 --- a/cmvr-es/manager/safety/src/safety_reason.cpp +++ b/cmvr-es/manager/safety_manager/src/safety_reason.cpp @@ -1,4 +1,4 @@ -#include "manager/safety/include/safety_reason.h" +#include "manager/safety_manager/include/safety_reason.h" namespace cmvr::safety { diff --git a/cmvr-es/manager/safety/src/safety_snapshot_store.cpp b/cmvr-es/manager/safety_manager/src/safety_snapshot_store.cpp similarity index 99% rename from cmvr-es/manager/safety/src/safety_snapshot_store.cpp rename to cmvr-es/manager/safety_manager/src/safety_snapshot_store.cpp index dc7341d8..5a80a38b 100644 --- a/cmvr-es/manager/safety/src/safety_snapshot_store.cpp +++ b/cmvr-es/manager/safety_manager/src/safety_snapshot_store.cpp @@ -1,4 +1,4 @@ -#include "manager/safety/include/safety_snapshot_store.h" +#include "manager/safety_manager/include/safety_snapshot_store.h" #include #include diff --git a/cmvr-es/manager/safety/tests/command_ledger_test.cpp b/cmvr-es/manager/safety_manager/tests/command_ledger_test.cpp similarity index 98% rename from cmvr-es/manager/safety/tests/command_ledger_test.cpp rename to cmvr-es/manager/safety_manager/tests/command_ledger_test.cpp index 4515e356..bad8e503 100644 --- a/cmvr-es/manager/safety/tests/command_ledger_test.cpp +++ b/cmvr-es/manager/safety_manager/tests/command_ledger_test.cpp @@ -1,4 +1,4 @@ -#include "manager/safety/include/command_ledger.h" +#include "manager/safety_manager/include/command_ledger.h" #include #include diff --git a/cmvr-es/manager/safety/tests/safety_coordinator_test.cpp b/cmvr-es/manager/safety_manager/tests/safety_manager_test.cpp similarity index 91% rename from cmvr-es/manager/safety/tests/safety_coordinator_test.cpp rename to cmvr-es/manager/safety_manager/tests/safety_manager_test.cpp index fe43d4b6..1667e251 100644 --- a/cmvr-es/manager/safety/tests/safety_coordinator_test.cpp +++ b/cmvr-es/manager/safety_manager/tests/safety_manager_test.cpp @@ -1,4 +1,4 @@ -#include "manager/safety/include/safety_coordinator.h" +#include "manager/safety_manager/include/safety_manager.h" #include #include @@ -166,9 +166,9 @@ AdmissionRequest actuateRequest() return request; } -TEST(SafetyCoordinatorTest, ShadowReportsDenyWithoutChangingLegacyBehavior) +TEST(SafetyManagerTest, ShadowReportsDenyWithoutChangingLegacyBehavior) { - SafetyCoordinator coordinator; + SafetyManager coordinator; ASSERT_TRUE(coordinator.registerDevice({controlDescriptor(), {}, {}})); coordinator.markStartupComplete(); @@ -180,22 +180,22 @@ TEST(SafetyCoordinatorTest, ShadowReportsDenyWithoutChangingLegacyBehavior) EXPECT_TRUE(result.permit.has_value()); } -TEST(SafetyCoordinatorTest, +TEST(SafetyManagerTest, EnforceSelectedStartupRejectsEmptyOrUnknownCoverage) { - SafetyCoordinatorConfig empty_config; + SafetyManagerConfig empty_config; empty_config.enforcement_mode = EnforcementMode::EnforceSelected; - SafetyCoordinator empty(empty_config); + SafetyManager empty(empty_config); const auto empty_result = empty.validateStartupCoverage( SafetyClock::now() + std::chrono::milliseconds(10)); ASSERT_FALSE(empty_result.ready); ASSERT_EQ(empty_result.issues.size(), 1U); EXPECT_EQ(empty_result.issues.front().reason, SafetyReason::InvalidArgument); - SafetyCoordinatorConfig missing_config; + SafetyManagerConfig missing_config; missing_config.enforcement_mode = EnforcementMode::EnforceSelected; missing_config.enforced_device_ids.insert("missing-arm"); - SafetyCoordinator missing(missing_config); + SafetyManager missing(missing_config); const auto missing_result = missing.validateStartupCoverage( SafetyClock::now() + std::chrono::milliseconds(10)); ASSERT_FALSE(missing_result.ready); @@ -204,13 +204,13 @@ TEST(SafetyCoordinatorTest, EXPECT_EQ(missing_result.issues.front().reason, SafetyReason::DeviceNotFound); } -TEST(SafetyCoordinatorTest, +TEST(SafetyManagerTest, EnforceAllStartupRequiresEndpointParticipantAndFreshSnapshot) { - SafetyCoordinatorConfig config; + SafetyManagerConfig config; config.enforcement_mode = EnforcementMode::EnforceAll; - SafetyCoordinator missing_capability(config); + SafetyManager missing_capability(config); ASSERT_TRUE(missing_capability.registerDevice( {controlDescriptor(), {}, {}})); const auto structural = missing_capability.validateStartupCoverage( @@ -218,7 +218,7 @@ TEST(SafetyCoordinatorTest, EXPECT_FALSE(structural.ready); EXPECT_EQ(structural.issues.size(), 2U); - SafetyCoordinator missing_sample(config); + SafetyManager missing_sample(config); auto silent_endpoint = std::make_shared(controlDescriptor()); silent_endpoint->publish_on_refresh = false; @@ -233,12 +233,12 @@ TEST(SafetyCoordinatorTest, EXPECT_EQ(stale.issues.front().reason, SafetyReason::SafetyStateMissing); } -TEST(SafetyCoordinatorTest, +TEST(SafetyManagerTest, HardwareUnsafeSnapshotBlocksAdmissionButNotStructuralStartup) { - SafetyCoordinatorConfig config; + SafetyManagerConfig config; config.enforcement_mode = EnforcementMode::EnforceAll; - SafetyCoordinator coordinator(config); + SafetyManager coordinator(config); auto endpoint = std::make_shared(controlDescriptor()); endpoint->condition = SafetyCondition::Unsafe; endpoint->emergency_stop = TriState::True; @@ -258,11 +258,11 @@ TEST(SafetyCoordinatorTest, admission.decision.reason, SafetyReason::EmergencyStopActive); } -TEST(SafetyCoordinatorTest, EnforceAllFailsClosedOnUnknownControlState) +TEST(SafetyManagerTest, EnforceAllFailsClosedOnUnknownControlState) { - SafetyCoordinatorConfig config; + SafetyManagerConfig config; config.enforcement_mode = EnforcementMode::EnforceAll; - SafetyCoordinator coordinator(config); + SafetyManager coordinator(config); ASSERT_TRUE(coordinator.registerDevice({controlDescriptor(), {}, {}})); coordinator.markStartupComplete(); @@ -273,11 +273,11 @@ TEST(SafetyCoordinatorTest, EnforceAllFailsClosedOnUnknownControlState) EXPECT_FALSE(result.permit.has_value()); } -TEST(SafetyCoordinatorTest, ControlSafetyBitsMustBeExplicitlyFalse) +TEST(SafetyManagerTest, ControlSafetyBitsMustBeExplicitlyFalse) { - SafetyCoordinatorConfig config; + SafetyManagerConfig config; config.enforcement_mode = EnforcementMode::EnforceAll; - SafetyCoordinator coordinator(config); + SafetyManager coordinator(config); auto endpoint = std::make_shared(controlDescriptor()); endpoint->protective_stop = TriState::Unknown; ASSERT_TRUE(coordinator.registerDevice( @@ -296,11 +296,11 @@ TEST(SafetyCoordinatorTest, ControlSafetyBitsMustBeExplicitlyFalse) DeviceAdmissionState::Blocked); } -TEST(SafetyCoordinatorTest, EnforcedDispatchRunsFinalHardwareCheck) +TEST(SafetyManagerTest, EnforcedDispatchRunsFinalHardwareCheck) { - SafetyCoordinatorConfig config; + SafetyManagerConfig config; config.enforcement_mode = EnforcementMode::EnforceAll; - SafetyCoordinator coordinator(config); + SafetyManager coordinator(config); auto endpoint = std::make_shared(controlDescriptor()); ASSERT_TRUE(coordinator.registerDevice( {controlDescriptor(), endpoint, {}})); @@ -317,12 +317,12 @@ TEST(SafetyCoordinatorTest, EnforcedDispatchRunsFinalHardwareCheck) EXPECT_EQ(endpoint->hardware_checks.load(), 1); } -TEST(SafetyCoordinatorTest, +TEST(SafetyManagerTest, StartActivityMayEnterFromRestrictedButActuationMayNot) { - SafetyCoordinatorConfig config; + SafetyManagerConfig config; config.enforcement_mode = EnforcementMode::EnforceAll; - SafetyCoordinator coordinator(config); + SafetyManager coordinator(config); auto endpoint = std::make_shared(controlDescriptor()); endpoint->condition = SafetyCondition::Restricted; endpoint->ready = TriState::False; @@ -346,11 +346,11 @@ TEST(SafetyCoordinatorTest, EXPECT_EQ(actuation.decision.reason, SafetyReason::HardwareUnsafe); } -TEST(SafetyCoordinatorTest, SuccessfulStopInvalidatesOldPermitAndReopens) +TEST(SafetyManagerTest, SuccessfulStopInvalidatesOldPermitAndReopens) { - SafetyCoordinatorConfig config; + SafetyManagerConfig config; config.enforcement_mode = EnforcementMode::EnforceAll; - SafetyCoordinator coordinator(config); + SafetyManager coordinator(config); auto endpoint = std::make_shared(controlDescriptor()); auto participant = std::make_shared(); ASSERT_TRUE(coordinator.registerDevice( @@ -388,11 +388,11 @@ TEST(SafetyCoordinatorTest, SuccessfulStopInvalidatesOldPermitAndReopens) EXPECT_TRUE(snapshot.participants.front().last_release.success); } -TEST(SafetyCoordinatorTest, FailedStopRequiresVerifiedRecovery) +TEST(SafetyManagerTest, FailedStopRequiresVerifiedRecovery) { - SafetyCoordinatorConfig config; + SafetyManagerConfig config; config.enforcement_mode = EnforcementMode::EnforceAll; - SafetyCoordinator coordinator(config); + SafetyManager coordinator(config); auto endpoint = std::make_shared(controlDescriptor()); auto participant = std::make_shared(); participant->verify_result = { @@ -437,9 +437,9 @@ TEST(SafetyCoordinatorTest, FailedStopRequiresVerifiedRecovery) EXPECT_TRUE(reopened.participants.front().last_release.success); } -TEST(SafetyCoordinatorTest, RecoveryCannotIgnoreEmergencyStop) +TEST(SafetyManagerTest, RecoveryCannotIgnoreEmergencyStop) { - SafetyCoordinator coordinator; + SafetyManager coordinator; auto endpoint = std::make_shared(controlDescriptor()); auto participant = std::make_shared(); ASSERT_TRUE(coordinator.registerDevice( @@ -466,9 +466,9 @@ TEST(SafetyCoordinatorTest, RecoveryCannotIgnoreEmergencyStop) EXPECT_EQ(endpoint->recoveries.load(), 0); } -TEST(SafetyCoordinatorTest, RecoveryAuditFailureCannotReleaseLatch) +TEST(SafetyManagerTest, RecoveryAuditFailureCannotReleaseLatch) { - SafetyCoordinator coordinator; + SafetyManager coordinator; auto endpoint = std::make_shared(controlDescriptor()); auto participant = std::make_shared(); participant->verify_result = { diff --git a/cmvr-es/manager/safety/tests/safety_snapshot_store_test.cpp b/cmvr-es/manager/safety_manager/tests/safety_snapshot_store_test.cpp similarity index 98% rename from cmvr-es/manager/safety/tests/safety_snapshot_store_test.cpp rename to cmvr-es/manager/safety_manager/tests/safety_snapshot_store_test.cpp index c5cdba4d..7d2c93d6 100644 --- a/cmvr-es/manager/safety/tests/safety_snapshot_store_test.cpp +++ b/cmvr-es/manager/safety_manager/tests/safety_snapshot_store_test.cpp @@ -1,4 +1,4 @@ -#include "manager/safety/include/safety_snapshot_store.h" +#include "manager/safety_manager/include/safety_snapshot_store.h" #include #include diff --git a/cmvr-es/manager/task_manager/src/task_manager.cpp b/cmvr-es/manager/task_manager/src/task_manager.cpp index 85ba6df9..12e0a53b 100644 --- a/cmvr-es/manager/task_manager/src/task_manager.cpp +++ b/cmvr-es/manager/task_manager/src/task_manager.cpp @@ -9,7 +9,7 @@ #include "common/base/logging/logger.h" #include "common/config/config_files.h" -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" #include "task/task_factory.h" using namespace cmvr; diff --git a/cmvr-es/manager/task_manager/tests/task_manager_lifecycle_test.cpp b/cmvr-es/manager/task_manager/tests/task_manager_lifecycle_test.cpp index 1402bc29..bc7a4bf8 100644 --- a/cmvr-es/manager/task_manager/tests/task_manager_lifecycle_test.cpp +++ b/cmvr-es/manager/task_manager/tests/task_manager_lifecycle_test.cpp @@ -12,7 +12,7 @@ #include -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" #include "task/task_factory.h" namespace { diff --git a/cmvr-es/service/CMakeLists.txt b/cmvr-es/service/CMakeLists.txt index 75f57cc9..4e0971cf 100644 --- a/cmvr-es/service/CMakeLists.txt +++ b/cmvr-es/service/CMakeLists.txt @@ -1,548 +1,4 @@ - -add_library(service - stop_all/src/stop_operation_dispatcher.cpp - action/src/action_queue_executor.cpp - grpc/src/camera_ptz_activity_registry.cpp - grpc/src/media_activity_coordinator.cpp - grpc/src/motor_activity_coordinator.cpp - grpc/src/grpc_camera_service.cpp - grpc/src/grpc_command_transaction.cpp - grpc/src/grpc_error_logging_interceptor.cpp - grpc/src/grpc_recovery_audit.cpp - grpc/src/grpc_safety_proto.cpp - grpc/src/grpc_safety_participants.cpp - grpc/src/grpc_security.cpp - grpc/src/grpc_system_service.cpp - grpc/src/grpc_speaker_service.cpp - grpc/src/grpc_microphone_service.cpp - grpc/src/grpc_head_service.cpp - grpc/src/grpc_dexhand_service.cpp - grpc/src/grpc_arm_service.cpp - grpc/src/grpc_arm_teleop_service.cpp - grpc/src/grpc_robot_arm_teleop_backend.cpp - grpc/src/grpc_motor_service.cpp - grpc/src/grpc_agv_service.cpp - grpc/src/grpc_hlc_service.cpp - ../task/grpc_server_task/src/grpc_server_task.cpp -) - -target_include_directories(service PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) - -target_link_libraries(service PRIVATE - cmvr_es::proto - cmvr_es::stop_all_admission_gate - cmvr_es::camera_operational_activity_registry - osqp - cmvr_es::control_authority - cmvr_es::device_manager - cmvr_es::task_manager - cmvr_es::algorithms::controller - cmvr_es::task - cmvr_es::media_source_hub - cmvr_es::device_media_source_adapter - protobuf::libprotobuf -) - -add_library(cmvr_es::service ALIAS service) -install(TARGETS service LIBRARY DESTINATION lib) - -if(BUILD_TESTING) - add_executable(stop_all_admission_gate_test - stop_all/tests/stop_all_admission_gate_test.cpp - stop_all/src/stop_all_admission_gate.cpp - ) - target_include_directories(stop_all_admission_gate_test - PRIVATE - ${CMAKE_SOURCE_DIR}/cmvr-es - ) - target_link_libraries(stop_all_admission_gate_test PRIVATE - gtest - gtest_main - pthread - ) - add_test( - NAME stop_all_admission_gate_test - COMMAND stop_all_admission_gate_test - ) - set_tests_properties(stop_all_admission_gate_test PROPERTIES TIMEOUT 10) - - add_executable(stop_operation_dispatcher_test - stop_all/tests/stop_operation_dispatcher_test.cpp - stop_all/src/stop_operation_dispatcher.cpp - ) - target_include_directories(stop_operation_dispatcher_test - PRIVATE - ${CMAKE_SOURCE_DIR}/cmvr-es - ) - target_link_libraries(stop_operation_dispatcher_test PRIVATE - gtest - gtest_main - pthread - ) - add_test( - NAME stop_operation_dispatcher_test - COMMAND stop_operation_dispatcher_test - ) - set_tests_properties(stop_operation_dispatcher_test PROPERTIES TIMEOUT 10) - - add_executable(camera_operational_activity_registry_test - grpc/tests/camera_operational_activity_registry_test.cpp - ) - target_include_directories(camera_operational_activity_registry_test - PRIVATE - ${CMAKE_SOURCE_DIR}/cmvr-es - ) - target_link_libraries(camera_operational_activity_registry_test PRIVATE - cmvr_es::proto - cmvr_es::camera_operational_activity_registry - gtest - gtest_main - pthread - ) - add_test( - NAME camera_operational_activity_registry_test - COMMAND camera_operational_activity_registry_test - ) - set_tests_properties(camera_operational_activity_registry_test PROPERTIES - TIMEOUT 10) - - add_executable(camera_ptz_activity_registry_test - grpc/tests/camera_ptz_activity_registry_test.cpp - grpc/src/camera_ptz_activity_registry.cpp - stop_all/src/stop_all_admission_gate.cpp - ) - target_include_directories(camera_ptz_activity_registry_test - PRIVATE - ${CMAKE_SOURCE_DIR}/cmvr-es - ) - target_link_libraries(camera_ptz_activity_registry_test PRIVATE - cmvr_es::proto - gtest - gtest_main - pthread - ) - add_test( - NAME camera_ptz_activity_registry_test - COMMAND camera_ptz_activity_registry_test - ) - set_tests_properties(camera_ptz_activity_registry_test PROPERTIES TIMEOUT 10) - - add_executable(media_activity_coordinator_test - grpc/tests/media_activity_coordinator_test.cpp - grpc/src/media_activity_coordinator.cpp - stop_all/src/stop_all_admission_gate.cpp - ) - target_include_directories(media_activity_coordinator_test - PRIVATE - ${CMAKE_SOURCE_DIR}/cmvr-es - ) - target_link_libraries(media_activity_coordinator_test PRIVATE - cmvr_es::logging - pthread - ) - add_test( - NAME media_activity_coordinator_test - COMMAND media_activity_coordinator_test - ) - set(_grpc_media_test_environment - "LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}" - ) - if(CMVR_TEST_SYSTEM_LIBSTDCXX) - list(APPEND _grpc_media_test_environment - "LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}") - endif() - set_tests_properties(media_activity_coordinator_test PROPERTIES - TIMEOUT 10 - ENVIRONMENT "${_grpc_media_test_environment}" - ) - - add_executable(motor_activity_coordinator_test - grpc/tests/motor_activity_coordinator_test.cpp - grpc/src/motor_activity_coordinator.cpp - ) - target_include_directories(motor_activity_coordinator_test - PRIVATE - ${CMAKE_SOURCE_DIR}/cmvr-es - ) - target_link_libraries(motor_activity_coordinator_test PRIVATE - cmvr_es::logging - pthread - ) - add_test( - NAME motor_activity_coordinator_test - COMMAND motor_activity_coordinator_test - ) - set_tests_properties(motor_activity_coordinator_test PROPERTIES - TIMEOUT 10 - ENVIRONMENT "${_grpc_media_test_environment}" - ) - - add_executable(grpc_camera_stream_policy_test - grpc/tests/grpc_camera_stream_policy_test.cpp - ) - target_include_directories(grpc_camera_stream_policy_test - PRIVATE - ${CMAKE_SOURCE_DIR}/cmvr-es - ) - add_test( - NAME grpc_camera_stream_policy_test - COMMAND grpc_camera_stream_policy_test - ) - set_tests_properties(grpc_camera_stream_policy_test PROPERTIES TIMEOUT 10) - - add_executable(grpc_system_service_test - grpc/tests/grpc_system_service_test.cpp - ) - target_include_directories(grpc_system_service_test - PRIVATE - ${CMAKE_SOURCE_DIR}/cmvr-es - ${CMAKE_SOURCE_DIR}/cmvr-es/manager/device_manager - ) - target_link_libraries(grpc_system_service_test - PRIVATE - service - cmvr_es::proto - gtest - gtest_main - pthread - ) - add_test( - NAME grpc_system_service_test - COMMAND grpc_system_service_test - ) - set(_grpc_system_test_environment - "LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}" - ) - if(CMVR_TEST_SYSTEM_LIBSTDCXX) - list(APPEND _grpc_system_test_environment - "LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}") - endif() - set_tests_properties(grpc_system_service_test PROPERTIES - TIMEOUT 10 - ENVIRONMENT "${_grpc_system_test_environment}" - ) - - add_executable(grpc_error_logging_interceptor_test - grpc/tests/grpc_error_logging_interceptor_test.cpp - grpc/src/grpc_error_logging_interceptor.cpp - ) - target_include_directories(grpc_error_logging_interceptor_test - PRIVATE - ${CMAKE_SOURCE_DIR}/cmvr-es - ) - target_link_libraries(grpc_error_logging_interceptor_test - PRIVATE - cmvr_es::logging - cmvr_es::proto - gtest - gtest_main - pthread - ) - add_test( - NAME grpc_error_logging_interceptor_test - COMMAND grpc_error_logging_interceptor_test - ) - set_tests_properties(grpc_error_logging_interceptor_test PROPERTIES - TIMEOUT 10 - ENVIRONMENT "${_grpc_system_test_environment}" - ) - - add_executable(grpc_security_test - grpc/tests/grpc_security_test.cpp - grpc/src/grpc_security.cpp - ) - target_include_directories(grpc_security_test - PRIVATE - ${CMAKE_SOURCE_DIR}/cmvr-es - ) - target_link_libraries(grpc_security_test - PRIVATE - cmvr_es::proto - gtest - gtest_main - pthread - ) - add_test( - NAME grpc_security_test - COMMAND grpc_security_test - ) - set_tests_properties(grpc_security_test PROPERTIES - TIMEOUT 10 - ENVIRONMENT "${_grpc_system_test_environment}" - ) - - add_executable(grpc_command_transaction_test - grpc/tests/grpc_command_transaction_test.cpp - grpc/src/grpc_command_transaction.cpp - grpc/src/grpc_safety_proto.cpp - grpc/src/grpc_security.cpp - ) - target_include_directories(grpc_command_transaction_test - PRIVATE - ${CMAKE_SOURCE_DIR}/cmvr-es - ) - target_link_libraries(grpc_command_transaction_test PRIVATE - cmvr_es::safety_coordinator - cmvr_es::proto - gtest - gtest_main - pthread - ) - add_test( - NAME grpc_command_transaction_test - COMMAND grpc_command_transaction_test - ) - set_tests_properties(grpc_command_transaction_test PROPERTIES - TIMEOUT 10 - ENVIRONMENT "${_grpc_system_test_environment}" - ) - - add_executable(grpc_arm_service_test - grpc/tests/grpc_arm_service_test.cpp - ) - target_include_directories(grpc_arm_service_test - PRIVATE - ${CMAKE_SOURCE_DIR}/cmvr-es - ${CMAKE_SOURCE_DIR}/cmvr-es/manager/device_manager - ) - target_link_libraries(grpc_arm_service_test - PRIVATE - service - cmvr_es::proto - gtest - gtest_main - pthread - ) - add_test( - NAME grpc_arm_service_test - COMMAND grpc_arm_service_test - ) - set_tests_properties(grpc_arm_service_test PROPERTIES - TIMEOUT 10 - ENVIRONMENT "${_grpc_system_test_environment}" - ) - - add_executable(grpc_arm_teleop_service_test - grpc/tests/grpc_arm_teleop_service_test.cpp - ) - target_include_directories(grpc_arm_teleop_service_test - PRIVATE - ${CMAKE_SOURCE_DIR}/cmvr-es - ) - target_link_libraries(grpc_arm_teleop_service_test - PRIVATE - service - cmvr_es::proto - gtest - gtest_main - pthread - ) - add_test( - NAME grpc_arm_teleop_service_test - COMMAND grpc_arm_teleop_service_test - ) - set(_grpc_arm_teleop_test_environment - "LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}" - ) - if(CMVR_TEST_SYSTEM_LIBSTDCXX) - list(APPEND _grpc_arm_teleop_test_environment - "LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}") - endif() - set_tests_properties(grpc_arm_teleop_service_test PROPERTIES - TIMEOUT 20 - ENVIRONMENT "${_grpc_arm_teleop_test_environment}" - ) - - add_executable(grpc_robot_arm_teleop_backend_test - grpc/tests/grpc_robot_arm_teleop_backend_test.cpp - ) - target_include_directories(grpc_robot_arm_teleop_backend_test - PRIVATE - ${CMAKE_SOURCE_DIR}/cmvr-es - ) - target_link_libraries(grpc_robot_arm_teleop_backend_test - PRIVATE - service - cmvr_es::proto - gtest - gtest_main - pthread - ) - add_test( - NAME grpc_robot_arm_teleop_backend_test - COMMAND grpc_robot_arm_teleop_backend_test - ) - set_tests_properties(grpc_robot_arm_teleop_backend_test PROPERTIES - TIMEOUT 10 - ENVIRONMENT "${_grpc_arm_teleop_test_environment}" - ) - - add_executable(grpc_motor_service_test - grpc/tests/grpc_motor_service_test.cpp - ) - target_include_directories(grpc_motor_service_test - PRIVATE - ${CMAKE_SOURCE_DIR}/cmvr-es - ${CMAKE_SOURCE_DIR}/cmvr-es/manager/device_manager - ) - target_link_libraries(grpc_motor_service_test - PRIVATE - service - gtest - gtest_main - pthread - ) - add_test( - NAME grpc_motor_service_test - COMMAND grpc_motor_service_test - ) - set(_grpc_motor_test_environment - "LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}" - ) - if(CMVR_TEST_SYSTEM_LIBSTDCXX) - list(APPEND _grpc_motor_test_environment - "LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}") - endif() - set_tests_properties(grpc_motor_service_test PROPERTIES - TIMEOUT 10 - ENVIRONMENT "${_grpc_motor_test_environment}" - ) - - add_executable(grpc_agv_service_test - grpc/tests/grpc_agv_service_test.cpp - ) - target_include_directories(grpc_agv_service_test - PRIVATE - ${CMAKE_SOURCE_DIR}/cmvr-es - ${CMAKE_SOURCE_DIR}/cmvr-es/manager/device_manager - ) - target_link_libraries(grpc_agv_service_test - PRIVATE - service - gtest - gtest_main - pthread - ) - add_test( - NAME grpc_agv_service_test - COMMAND grpc_agv_service_test - ) - set(_grpc_agv_test_environment - "LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}" - ) - if(CMVR_TEST_SYSTEM_LIBSTDCXX) - list(APPEND _grpc_agv_test_environment - "LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}") - endif() - set_tests_properties(grpc_agv_service_test PROPERTIES - TIMEOUT 10 - ENVIRONMENT "${_grpc_agv_test_environment}" - ) - - add_executable(grpc_head_service_test - grpc/tests/grpc_head_service_test.cpp - ) - target_include_directories(grpc_head_service_test - PRIVATE - ${CMAKE_SOURCE_DIR}/cmvr-es - ${CMAKE_SOURCE_DIR}/cmvr-es/manager/device_manager - ) - target_link_libraries(grpc_head_service_test - PRIVATE - service - cmvr_es::proto - gtest - gtest_main - pthread - ) - add_test( - NAME grpc_head_service_test - COMMAND grpc_head_service_test - ) - set_tests_properties(grpc_head_service_test PROPERTIES - TIMEOUT 15 - ENVIRONMENT "${_grpc_system_test_environment}" - ) - - add_executable(grpc_dexhand_service_test - grpc/tests/grpc_dexhand_service_test.cpp - ) - target_include_directories(grpc_dexhand_service_test - PRIVATE - ${CMAKE_SOURCE_DIR}/cmvr-es - ${CMAKE_SOURCE_DIR}/cmvr-es/manager/device_manager - ) - target_link_libraries(grpc_dexhand_service_test - PRIVATE - service - cmvr_es::proto - gtest - gtest_main - pthread - ) - add_test( - NAME grpc_dexhand_service_test - COMMAND grpc_dexhand_service_test - ) - set_tests_properties(grpc_dexhand_service_test PROPERTIES - TIMEOUT 15 - ENVIRONMENT "${_grpc_system_test_environment}" - ) - -endif() - -# -------------------------------------------------------- -# Unit test -# -------------------------------------------------------- -find_package(OpenCV REQUIRED) - -include_directories( - ${CMAKE_SOURCE_DIR}/third_party/gtest/1.17.0/include -) - -link_directories( - ${CMAKE_SOURCE_DIR}/third_party/gtest/1.17.0/lib -) - - -add_executable(grpc_arm_client_test - grpc/src/grpc_arm_client_test.cpp -) - - -target_link_libraries(grpc_arm_client_test - PRIVATE - cmvr_es::device::canbus - cmvr_es::device::ti5_canopen_motor_driver - osqp - gtest - gtest_main - pthread - glog - cmvr_es::proto - ccd - fcl - cmvr_es::device_manager - ${OpenCV_LIBS} -) - - -add_executable(grpc_hlc_client_test - grpc/src/grpc_hlc_client_test.cpp -) - - -target_link_libraries(grpc_hlc_client_test - PRIVATE - cmvr_es::device::canbus - cmvr_es::device::ti5_canopen_motor_driver - osqp - gtest - gtest_main - pthread - glog - cmvr_es::proto - ccd - fcl - cmvr_es::device_manager -) +# Service is intentionally split by transport. The QUIC edge target is added +# from the project root before task targets; the gRPC tree is added here after +# its manager and task dependencies are available. +add_subdirectory(grpc) diff --git a/cmvr-es/service/README.md b/cmvr-es/service/README.md index 9a78d3e6..39a1ee13 100644 --- a/cmvr-es/service/README.md +++ b/cmvr-es/service/README.md @@ -6,14 +6,33 @@ ## 当前结构 +`service/` 顶层只按传输协议保留两个子目录:`grpc/` 和 `quic_edge/`。gRPC +内部再按运行角色分层,避免把队列、停止控制、客户端和服务端实现混在同一层。 + +```text +service/ +├── grpc/ +│ ├── action/ # ActionQueue 校验、账本和 FIFO 执行器 +│ ├── client/ # 边缘端使用的 gRPC client +│ ├── server/ # gRPC service、协调器和安全扩展 +│ │ ├── include/ +│ │ ├── src/ +│ │ └── tests/ +│ └── stop_all/ # 高优先级 StopAll 通道 +└── quic_edge/ # QUIC client、控制状态机和媒体 packetizer +``` + | 目录 | 职责 | | --- | --- | -| `action/` | SystemService ActionQueue 的校验、幂等账本和边缘端 FIFO 执行器 | -| `grpc/` | 入站设备控制、状态查询和兼容流式接口 | +| `grpc/action/` | SystemService ActionQueue 的校验、幂等账本和边缘端 FIFO 执行器 | +| `grpc/client/` | 面向边缘端内部调用的 gRPC client | +| `grpc/server/` | 入站设备控制、状态查询、兼容流式接口和安全控制面 | +| `grpc/stop_all/` | 不进入普通命令队列的高优先级停止通道 | | `quic_edge/` | 边缘端主动连接平台的 QUIC client、控制状态机和媒体 packetizer | | `quic_edge/tests/` | 已登记到 CTest 的 QUIC 协议测试 | -两个遗留 gRPC client test 位于 `grpc/src/*_client_test.cpp`,当前没有通过 `add_test()` 登记。 +两个遗留 gRPC client test 位于 `grpc/server/tests/*_client_test.cpp`,当前没有通过 +`add_test()` 登记;它们是历史可执行文件,不代表默认自动覆盖。 gRPC 和 QUIC 的职责边界: @@ -99,10 +118,10 @@ ActionQueue 遵循以下执行语义: - Proto:[`../../protos/cmvr/api/motor_service.proto`](../../protos/cmvr/api/motor_service.proto) 和 [`../../protos/cmvr/api/motor_command.proto`](../../protos/cmvr/api/motor_command.proto) -- 实现:[`grpc/include/grpc_motor_service.h`](grpc/include/grpc_motor_service.h) - 和 [`grpc/src/grpc_motor_service.cpp`](grpc/src/grpc_motor_service.cpp) +- 实现:[`grpc/server/include/grpc_motor_service.h`](grpc/server/include/grpc_motor_service.h) + 和 [`grpc/server/src/grpc_motor_service.cpp`](grpc/server/src/grpc_motor_service.cpp) - 注册:[`../task/grpc_server_task/src/grpc_server_task.cpp`](../task/grpc_server_task/src/grpc_server_task.cpp) -- 单元测试:[`grpc/tests/grpc_motor_service_test.cpp`](grpc/tests/grpc_motor_service_test.cpp) +- 单元测试:[`grpc/server/tests/grpc_motor_service_test.cpp`](grpc/server/tests/grpc_motor_service_test.cpp) 服务按单电机仲裁。同步 Profile 命令、Cyclic Position/Velocity 双向流、 `setEnabled`、状态读取和软件 `emergencyStop` 共用同一控制权状态: @@ -140,8 +159,9 @@ import 路径必须相对于 `protos/`。兼容规则见 [`../../protos/README.m ```text service/grpc/ -├── include/grpc_example_service.h -└── src/grpc_example_service.cpp +└── server/ + ├── include/grpc_example_service.h + └── src/grpc_example_service.cpp ``` 实现类继承生成的: @@ -203,7 +223,7 @@ cmvr::api::ExampleService::Service - 检查 `context->IsCancelled()`; - 检查 `Read()` / `Write()` 返回; -- 使用 RAII 或 MediaSourceHub Subscription 释放 producer lease; +- 使用 RAII 或 MediaSourceManager Subscription 释放 producer lease; - 不持有设备状态锁进行网络写; - 为 wait/read 使用有限 timeout; - 慢客户端不能阻塞设备生产线程; @@ -211,7 +231,7 @@ cmvr::api::ExampleService::Service - gRPC RGB 流在积压超过 `camera_stream_max_pending_frames` 或帧龄超过 `camera_stream_max_frame_age_ms` 时主动丢弃旧帧,请求 IDR,并从下一个关键帧恢复。 -当前仅 gRPC RGB 和麦克风流使用 MediaSourceHub;Depth/RGBD 仍直接读取设备帧。 +当前仅 gRPC RGB 和麦克风流使用 MediaSourceManager;Depth/RGBD 仍直接读取设备帧。 gRPC 相机实时流默认最多保留 2 帧积压、最大允许 250 ms 帧龄。两个配置项填 0 时使用上述默认值。该策略以低延迟为目标,不保证每个视频帧都到达客户端;控制命令 diff --git a/cmvr-es/service/grpc/CMakeLists.txt b/cmvr-es/service/grpc/CMakeLists.txt new file mode 100644 index 00000000..cff56bd2 --- /dev/null +++ b/cmvr-es/service/grpc/CMakeLists.txt @@ -0,0 +1,550 @@ + +add_library(service + stop_all/src/stop_operation_dispatcher.cpp + action/src/action_queue_executor.cpp + server/src/camera_ptz_activity_registry.cpp + server/src/media_activity_coordinator.cpp + server/src/motor_activity_coordinator.cpp + server/src/grpc_camera_service.cpp + server/src/grpc_command_transaction.cpp + server/src/grpc_error_logging_interceptor.cpp + server/src/grpc_recovery_audit.cpp + server/src/grpc_safety_proto.cpp + server/src/grpc_safety_participants.cpp + server/src/grpc_security.cpp + server/src/grpc_system_service.cpp + server/src/grpc_speaker_service.cpp + server/src/grpc_microphone_service.cpp + server/src/grpc_head_service.cpp + server/src/grpc_dexhand_service.cpp + server/src/grpc_arm_service.cpp + server/src/grpc_arm_teleop_service.cpp + server/src/grpc_robot_arm_teleop_backend.cpp + server/src/grpc_motor_service.cpp + server/src/grpc_agv_service.cpp + server/src/grpc_hlc_service.cpp + ../../task/grpc_server_task/src/grpc_server_task.cpp +) + +target_include_directories(service PUBLIC + ${CMAKE_SOURCE_DIR}/cmvr-es +) + +target_link_libraries(service PRIVATE + cmvr_es::proto + cmvr_es::stop_all_admission_gate + cmvr_es::camera_operational_activity_registry + osqp + cmvr_es::control_authority_manager + cmvr_es::device_manager + cmvr_es::task_manager + cmvr_es::algorithms::controller + cmvr_es::task + cmvr_es::media_source_manager + cmvr_es::device_media_source_adapter + protobuf::libprotobuf +) + +add_library(cmvr_es::service ALIAS service) +install(TARGETS service LIBRARY DESTINATION lib) + +if(BUILD_TESTING) + add_executable(stop_all_admission_gate_test + stop_all/tests/stop_all_admission_gate_test.cpp + stop_all/src/stop_all_admission_gate.cpp + ) + target_include_directories(stop_all_admission_gate_test + PRIVATE + ${CMAKE_SOURCE_DIR}/cmvr-es + ) + target_link_libraries(stop_all_admission_gate_test PRIVATE + gtest + gtest_main + pthread + ) + add_test( + NAME stop_all_admission_gate_test + COMMAND stop_all_admission_gate_test + ) + set_tests_properties(stop_all_admission_gate_test PROPERTIES TIMEOUT 10) + + add_executable(stop_operation_dispatcher_test + stop_all/tests/stop_operation_dispatcher_test.cpp + stop_all/src/stop_operation_dispatcher.cpp + ) + target_include_directories(stop_operation_dispatcher_test + PRIVATE + ${CMAKE_SOURCE_DIR}/cmvr-es + ) + target_link_libraries(stop_operation_dispatcher_test PRIVATE + gtest + gtest_main + pthread + ) + add_test( + NAME stop_operation_dispatcher_test + COMMAND stop_operation_dispatcher_test + ) + set_tests_properties(stop_operation_dispatcher_test PROPERTIES TIMEOUT 10) + + add_executable(camera_operational_activity_registry_test + server/tests/camera_operational_activity_registry_test.cpp + ) + target_include_directories(camera_operational_activity_registry_test + PRIVATE + ${CMAKE_SOURCE_DIR}/cmvr-es + ) + target_link_libraries(camera_operational_activity_registry_test PRIVATE + cmvr_es::proto + cmvr_es::camera_operational_activity_registry + gtest + gtest_main + pthread + ) + add_test( + NAME camera_operational_activity_registry_test + COMMAND camera_operational_activity_registry_test + ) + set_tests_properties(camera_operational_activity_registry_test PROPERTIES + TIMEOUT 10) + + add_executable(camera_ptz_activity_registry_test + server/tests/camera_ptz_activity_registry_test.cpp + server/src/camera_ptz_activity_registry.cpp + stop_all/src/stop_all_admission_gate.cpp + ) + target_include_directories(camera_ptz_activity_registry_test + PRIVATE + ${CMAKE_SOURCE_DIR}/cmvr-es + ) + target_link_libraries(camera_ptz_activity_registry_test PRIVATE + cmvr_es::proto + gtest + gtest_main + pthread + ) + add_test( + NAME camera_ptz_activity_registry_test + COMMAND camera_ptz_activity_registry_test + ) + set_tests_properties(camera_ptz_activity_registry_test PROPERTIES TIMEOUT 10) + + add_executable(media_activity_coordinator_test + server/tests/media_activity_coordinator_test.cpp + server/src/media_activity_coordinator.cpp + stop_all/src/stop_all_admission_gate.cpp + ) + target_include_directories(media_activity_coordinator_test + PRIVATE + ${CMAKE_SOURCE_DIR}/cmvr-es + ) + target_link_libraries(media_activity_coordinator_test PRIVATE + cmvr_es::logging + pthread + ) + add_test( + NAME media_activity_coordinator_test + COMMAND media_activity_coordinator_test + ) + set(_grpc_media_test_environment + "LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}" + ) + if(CMVR_TEST_SYSTEM_LIBSTDCXX) + list(APPEND _grpc_media_test_environment + "LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}") + endif() + set_tests_properties(media_activity_coordinator_test PROPERTIES + TIMEOUT 10 + ENVIRONMENT "${_grpc_media_test_environment}" + ) + + add_executable(motor_activity_coordinator_test + server/tests/motor_activity_coordinator_test.cpp + server/src/motor_activity_coordinator.cpp + ) + target_include_directories(motor_activity_coordinator_test + PRIVATE + ${CMAKE_SOURCE_DIR}/cmvr-es + ) + target_link_libraries(motor_activity_coordinator_test PRIVATE + cmvr_es::logging + pthread + ) + add_test( + NAME motor_activity_coordinator_test + COMMAND motor_activity_coordinator_test + ) + set_tests_properties(motor_activity_coordinator_test PROPERTIES + TIMEOUT 10 + ENVIRONMENT "${_grpc_media_test_environment}" + ) + + add_executable(grpc_camera_stream_policy_test + server/tests/grpc_camera_stream_policy_test.cpp + ) + target_include_directories(grpc_camera_stream_policy_test + PRIVATE + ${CMAKE_SOURCE_DIR}/cmvr-es + ) + add_test( + NAME grpc_camera_stream_policy_test + COMMAND grpc_camera_stream_policy_test + ) + set_tests_properties(grpc_camera_stream_policy_test PROPERTIES TIMEOUT 10) + + add_executable(grpc_system_service_test + server/tests/grpc_system_service_test.cpp + ) + target_include_directories(grpc_system_service_test + PRIVATE + ${CMAKE_SOURCE_DIR}/cmvr-es + ${CMAKE_SOURCE_DIR}/cmvr-es/manager/device_manager + ) + target_link_libraries(grpc_system_service_test + PRIVATE + service + cmvr_es::proto + gtest + gtest_main + pthread + ) + add_test( + NAME grpc_system_service_test + COMMAND grpc_system_service_test + ) + set(_grpc_system_test_environment + "LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}" + ) + if(CMVR_TEST_SYSTEM_LIBSTDCXX) + list(APPEND _grpc_system_test_environment + "LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}") + endif() + set_tests_properties(grpc_system_service_test PROPERTIES + TIMEOUT 10 + ENVIRONMENT "${_grpc_system_test_environment}" + ) + + add_executable(grpc_error_logging_interceptor_test + server/tests/grpc_error_logging_interceptor_test.cpp + server/src/grpc_error_logging_interceptor.cpp + ) + target_include_directories(grpc_error_logging_interceptor_test + PRIVATE + ${CMAKE_SOURCE_DIR}/cmvr-es + ) + target_link_libraries(grpc_error_logging_interceptor_test + PRIVATE + cmvr_es::logging + cmvr_es::proto + gtest + gtest_main + pthread + ) + add_test( + NAME grpc_error_logging_interceptor_test + COMMAND grpc_error_logging_interceptor_test + ) + set_tests_properties(grpc_error_logging_interceptor_test PROPERTIES + TIMEOUT 10 + ENVIRONMENT "${_grpc_system_test_environment}" + ) + + add_executable(grpc_security_test + server/tests/grpc_security_test.cpp + server/src/grpc_security.cpp + ) + target_include_directories(grpc_security_test + PRIVATE + ${CMAKE_SOURCE_DIR}/cmvr-es + ) + target_link_libraries(grpc_security_test + PRIVATE + cmvr_es::proto + gtest + gtest_main + pthread + ) + add_test( + NAME grpc_security_test + COMMAND grpc_security_test + ) + set_tests_properties(grpc_security_test PROPERTIES + TIMEOUT 10 + ENVIRONMENT "${_grpc_system_test_environment}" + ) + + add_executable(grpc_command_transaction_test + server/tests/grpc_command_transaction_test.cpp + server/src/grpc_command_transaction.cpp + server/src/grpc_safety_proto.cpp + server/src/grpc_security.cpp + ) + target_include_directories(grpc_command_transaction_test + PRIVATE + ${CMAKE_SOURCE_DIR}/cmvr-es + ) + target_link_libraries(grpc_command_transaction_test PRIVATE + cmvr_es::safety_manager + cmvr_es::proto + gtest + gtest_main + pthread + ) + add_test( + NAME grpc_command_transaction_test + COMMAND grpc_command_transaction_test + ) + set_tests_properties(grpc_command_transaction_test PROPERTIES + TIMEOUT 10 + ENVIRONMENT "${_grpc_system_test_environment}" + ) + + add_executable(grpc_arm_service_test + server/tests/grpc_arm_service_test.cpp + ) + target_include_directories(grpc_arm_service_test + PRIVATE + ${CMAKE_SOURCE_DIR}/cmvr-es + ${CMAKE_SOURCE_DIR}/cmvr-es/manager/device_manager + ) + target_link_libraries(grpc_arm_service_test + PRIVATE + service + cmvr_es::proto + gtest + gtest_main + pthread + ) + add_test( + NAME grpc_arm_service_test + COMMAND grpc_arm_service_test + ) + set_tests_properties(grpc_arm_service_test PROPERTIES + TIMEOUT 10 + ENVIRONMENT "${_grpc_system_test_environment}" + ) + + add_executable(grpc_arm_teleop_service_test + server/tests/grpc_arm_teleop_service_test.cpp + ) + target_include_directories(grpc_arm_teleop_service_test + PRIVATE + ${CMAKE_SOURCE_DIR}/cmvr-es + ) + target_link_libraries(grpc_arm_teleop_service_test + PRIVATE + service + cmvr_es::proto + gtest + gtest_main + pthread + ) + add_test( + NAME grpc_arm_teleop_service_test + COMMAND grpc_arm_teleop_service_test + ) + set(_grpc_arm_teleop_test_environment + "LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}" + ) + if(CMVR_TEST_SYSTEM_LIBSTDCXX) + list(APPEND _grpc_arm_teleop_test_environment + "LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}") + endif() + set_tests_properties(grpc_arm_teleop_service_test PROPERTIES + TIMEOUT 20 + ENVIRONMENT "${_grpc_arm_teleop_test_environment}" + ) + + add_executable(grpc_robot_arm_teleop_backend_test + server/tests/grpc_robot_arm_teleop_backend_test.cpp + ) + target_include_directories(grpc_robot_arm_teleop_backend_test + PRIVATE + ${CMAKE_SOURCE_DIR}/cmvr-es + ) + target_link_libraries(grpc_robot_arm_teleop_backend_test + PRIVATE + service + cmvr_es::proto + gtest + gtest_main + pthread + ) + add_test( + NAME grpc_robot_arm_teleop_backend_test + COMMAND grpc_robot_arm_teleop_backend_test + ) + set_tests_properties(grpc_robot_arm_teleop_backend_test PROPERTIES + TIMEOUT 10 + ENVIRONMENT "${_grpc_arm_teleop_test_environment}" + ) + + add_executable(grpc_motor_service_test + server/tests/grpc_motor_service_test.cpp + ) + target_include_directories(grpc_motor_service_test + PRIVATE + ${CMAKE_SOURCE_DIR}/cmvr-es + ${CMAKE_SOURCE_DIR}/cmvr-es/manager/device_manager + ) + target_link_libraries(grpc_motor_service_test + PRIVATE + service + gtest + gtest_main + pthread + ) + add_test( + NAME grpc_motor_service_test + COMMAND grpc_motor_service_test + ) + set(_grpc_motor_test_environment + "LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}" + ) + if(CMVR_TEST_SYSTEM_LIBSTDCXX) + list(APPEND _grpc_motor_test_environment + "LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}") + endif() + set_tests_properties(grpc_motor_service_test PROPERTIES + TIMEOUT 10 + ENVIRONMENT "${_grpc_motor_test_environment}" + ) + + add_executable(grpc_agv_service_test + server/tests/grpc_agv_service_test.cpp + ) + target_include_directories(grpc_agv_service_test + PRIVATE + ${CMAKE_SOURCE_DIR}/cmvr-es + ${CMAKE_SOURCE_DIR}/cmvr-es/manager/device_manager + ) + target_link_libraries(grpc_agv_service_test + PRIVATE + service + gtest + gtest_main + pthread + ) + add_test( + NAME grpc_agv_service_test + COMMAND grpc_agv_service_test + ) + set(_grpc_agv_test_environment + "LD_LIBRARY_PATH=${CMVR_TEST_EXTERNAL_LIBRARY_PATH}" + ) + if(CMVR_TEST_SYSTEM_LIBSTDCXX) + list(APPEND _grpc_agv_test_environment + "LD_PRELOAD=${CMVR_TEST_SYSTEM_LIBSTDCXX}") + endif() + set_tests_properties(grpc_agv_service_test PROPERTIES + TIMEOUT 10 + ENVIRONMENT "${_grpc_agv_test_environment}" + ) + + add_executable(grpc_head_service_test + server/tests/grpc_head_service_test.cpp + ) + target_include_directories(grpc_head_service_test + PRIVATE + ${CMAKE_SOURCE_DIR}/cmvr-es + ${CMAKE_SOURCE_DIR}/cmvr-es/manager/device_manager + ) + target_link_libraries(grpc_head_service_test + PRIVATE + service + cmvr_es::proto + gtest + gtest_main + pthread + ) + add_test( + NAME grpc_head_service_test + COMMAND grpc_head_service_test + ) + set_tests_properties(grpc_head_service_test PROPERTIES + TIMEOUT 15 + ENVIRONMENT "${_grpc_system_test_environment}" + ) + + add_executable(grpc_dexhand_service_test + server/tests/grpc_dexhand_service_test.cpp + ) + target_include_directories(grpc_dexhand_service_test + PRIVATE + ${CMAKE_SOURCE_DIR}/cmvr-es + ${CMAKE_SOURCE_DIR}/cmvr-es/manager/device_manager + ) + target_link_libraries(grpc_dexhand_service_test + PRIVATE + service + cmvr_es::proto + gtest + gtest_main + pthread + ) + add_test( + NAME grpc_dexhand_service_test + COMMAND grpc_dexhand_service_test + ) + set_tests_properties(grpc_dexhand_service_test PROPERTIES + TIMEOUT 15 + ENVIRONMENT "${_grpc_system_test_environment}" + ) + +endif() + +# -------------------------------------------------------- +# Unit test +# -------------------------------------------------------- +find_package(OpenCV REQUIRED) + +include_directories( + ${CMAKE_SOURCE_DIR}/third_party/gtest/1.17.0/include +) + +link_directories( + ${CMAKE_SOURCE_DIR}/third_party/gtest/1.17.0/lib +) + + +add_executable(grpc_arm_client_test + server/tests/grpc_arm_client_test.cpp +) + + +target_link_libraries(grpc_arm_client_test + PRIVATE + cmvr_es::device::canbus + cmvr_es::device::ti5_canopen_motor_driver + osqp + gtest + gtest_main + pthread + glog + cmvr_es::proto + ccd + fcl + cmvr_es::device_manager + ${OpenCV_LIBS} +) + + +add_executable(grpc_hlc_client_test + server/tests/grpc_hlc_client_test.cpp +) + + +target_link_libraries(grpc_hlc_client_test + PRIVATE + cmvr_es::device::canbus + cmvr_es::device::ti5_canopen_motor_driver + osqp + gtest + gtest_main + pthread + glog + cmvr_es::proto + ccd + fcl + cmvr_es::device_manager +) diff --git a/cmvr-es/service/action/include/action_queue_executor.h b/cmvr-es/service/grpc/action/include/action_queue_executor.h similarity index 98% rename from cmvr-es/service/action/include/action_queue_executor.h rename to cmvr-es/service/grpc/action/include/action_queue_executor.h index 84587832..a80eb1be 100644 --- a/cmvr-es/service/action/include/action_queue_executor.h +++ b/cmvr-es/service/grpc/action/include/action_queue_executor.h @@ -9,7 +9,7 @@ #include #include "cmvr/api/system_command.pb.h" -#include "manager/safety/include/safety_types.h" +#include "manager/safety_manager/include/safety_types.h" namespace cmvr::device { class DeviceManager; diff --git a/cmvr-es/service/action/src/action_queue_executor.cpp b/cmvr-es/service/grpc/action/src/action_queue_executor.cpp similarity index 99% rename from cmvr-es/service/action/src/action_queue_executor.cpp rename to cmvr-es/service/grpc/action/src/action_queue_executor.cpp index 7a4508b6..07289f7f 100644 --- a/cmvr-es/service/action/src/action_queue_executor.cpp +++ b/cmvr-es/service/grpc/action/src/action_queue_executor.cpp @@ -1,4 +1,4 @@ -#include "service/action/include/action_queue_executor.h" +#include "service/grpc/action/include/action_queue_executor.h" #include #include @@ -36,10 +36,10 @@ #include "common/base/logging/logger.h" #include "devices/agv/abstract_agv.h" #include "devices/arm/robot_arm.h" -#include "manager/control_authority/include/control_authority_manager.h" +#include "manager/control_authority_manager/include/control_authority_manager.h" #include "manager/device_manager/include/device_manager.h" -#include "manager/safety/include/safety_coordinator.h" -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "manager/safety_manager/include/safety_manager.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" namespace cmvr::service { namespace { @@ -1965,7 +1965,7 @@ struct ActionQueueExecutor::Impl { } request.authority_generation = token.generation; request.deadline = deadline; - return device_manager.safetyCoordinator().admit(request); + return device_manager.safetyManager().admit(request); } static std::string admissionFailure( @@ -2010,7 +2010,7 @@ struct ActionQueueExecutor::Impl { StepOutcome::Canceled, "RobotArm ActionQueue control was preempted before dispatch"}; } - auto safety_dispatch = device_manager.safetyCoordinator() + auto safety_dispatch = device_manager.safetyManager() .beginDispatch(*safety_admission.permit); if (!safety_dispatch.acquired()) { return { @@ -2171,7 +2171,7 @@ struct ActionQueueExecutor::Impl { StepOutcome::Canceled, "AGV ActionQueue control was preempted before dispatch"}; } - auto safety_dispatch = device_manager.safetyCoordinator() + auto safety_dispatch = device_manager.safetyManager() .beginDispatch(*safety_admission.permit); if (!safety_dispatch.acquired()) { return { diff --git a/cmvr-es/service/arm_teleop_client/CMakeLists.txt b/cmvr-es/service/grpc/client/CMakeLists.txt similarity index 100% rename from cmvr-es/service/arm_teleop_client/CMakeLists.txt rename to cmvr-es/service/grpc/client/CMakeLists.txt diff --git a/cmvr-es/service/arm_teleop_client/include/grpc_arm_teleop_client.h b/cmvr-es/service/grpc/client/include/grpc_arm_teleop_client.h similarity index 100% rename from cmvr-es/service/arm_teleop_client/include/grpc_arm_teleop_client.h rename to cmvr-es/service/grpc/client/include/grpc_arm_teleop_client.h diff --git a/cmvr-es/service/arm_teleop_client/src/grpc_arm_teleop_client.cpp b/cmvr-es/service/grpc/client/src/grpc_arm_teleop_client.cpp similarity index 98% rename from cmvr-es/service/arm_teleop_client/src/grpc_arm_teleop_client.cpp rename to cmvr-es/service/grpc/client/src/grpc_arm_teleop_client.cpp index 0c686937..5f12d043 100644 --- a/cmvr-es/service/arm_teleop_client/src/grpc_arm_teleop_client.cpp +++ b/cmvr-es/service/grpc/client/src/grpc_arm_teleop_client.cpp @@ -1,4 +1,4 @@ -#include "service/arm_teleop_client/include/grpc_arm_teleop_client.h" +#include "service/grpc/client/include/grpc_arm_teleop_client.h" #include #include diff --git a/cmvr-es/service/arm_teleop_client/tests/grpc_arm_teleop_client_test.cpp b/cmvr-es/service/grpc/client/tests/grpc_arm_teleop_client_test.cpp similarity index 98% rename from cmvr-es/service/arm_teleop_client/tests/grpc_arm_teleop_client_test.cpp rename to cmvr-es/service/grpc/client/tests/grpc_arm_teleop_client_test.cpp index 8be21e70..3e1caa7c 100644 --- a/cmvr-es/service/arm_teleop_client/tests/grpc_arm_teleop_client_test.cpp +++ b/cmvr-es/service/grpc/client/tests/grpc_arm_teleop_client_test.cpp @@ -12,7 +12,7 @@ #include #include "cmvr/api/arm_teleop_v1.grpc.pb.h" -#include "service/arm_teleop_client/include/grpc_arm_teleop_client.h" +#include "service/grpc/client/include/grpc_arm_teleop_client.h" namespace { diff --git a/cmvr-es/service/grpc/include/camera_operational_activity_registry.h b/cmvr-es/service/grpc/server/include/camera_operational_activity_registry.h similarity index 100% rename from cmvr-es/service/grpc/include/camera_operational_activity_registry.h rename to cmvr-es/service/grpc/server/include/camera_operational_activity_registry.h diff --git a/cmvr-es/service/grpc/include/camera_ptz_activity_registry.h b/cmvr-es/service/grpc/server/include/camera_ptz_activity_registry.h similarity index 100% rename from cmvr-es/service/grpc/include/camera_ptz_activity_registry.h rename to cmvr-es/service/grpc/server/include/camera_ptz_activity_registry.h diff --git a/cmvr-es/service/grpc/include/grpc_agv_service.h b/cmvr-es/service/grpc/server/include/grpc_agv_service.h similarity index 100% rename from cmvr-es/service/grpc/include/grpc_agv_service.h rename to cmvr-es/service/grpc/server/include/grpc_agv_service.h diff --git a/cmvr-es/service/grpc/include/grpc_arm_service.h b/cmvr-es/service/grpc/server/include/grpc_arm_service.h similarity index 100% rename from cmvr-es/service/grpc/include/grpc_arm_service.h rename to cmvr-es/service/grpc/server/include/grpc_arm_service.h diff --git a/cmvr-es/service/grpc/include/grpc_arm_teleop_service.h b/cmvr-es/service/grpc/server/include/grpc_arm_teleop_service.h similarity index 93% rename from cmvr-es/service/grpc/include/grpc_arm_teleop_service.h rename to cmvr-es/service/grpc/server/include/grpc_arm_teleop_service.h index 4e7eaa12..d368428d 100644 --- a/cmvr-es/service/grpc/include/grpc_arm_teleop_service.h +++ b/cmvr-es/service/grpc/server/include/grpc_arm_teleop_service.h @@ -9,7 +9,7 @@ #include #include "cmvr/api/arm_teleop_v1.grpc.pb.h" -#include "manager/control_authority/include/control_authority_manager.h" +#include "manager/control_authority_manager/include/control_authority_manager.h" namespace cmvr::service { @@ -18,7 +18,7 @@ class GrpcSecurityGateway; } // namespace cmvr::service namespace cmvr::safety { -class SafetyCoordinator; +class SafetyManager; } namespace cmvr::service { @@ -87,7 +87,7 @@ public: makeDisabledArmTeleopBackend(), control::ControlAuthorityManager* authority = nullptr, std::shared_ptr security_gateway = nullptr, - safety::SafetyCoordinator* safety_coordinator = nullptr); + safety::SafetyManager* safety_manager = nullptr); ~ArmTeleopServiceImpl() override = default; grpc::Status Teleoperate( @@ -99,7 +99,7 @@ private: std::shared_ptr backend_; control::ControlAuthorityManager* authority_{nullptr}; std::shared_ptr security_gateway_; - safety::SafetyCoordinator* safety_coordinator_{nullptr}; + safety::SafetyManager* safety_manager_{nullptr}; }; } // namespace cmvr::service diff --git a/cmvr-es/service/grpc/include/grpc_camera_service.h b/cmvr-es/service/grpc/server/include/grpc_camera_service.h similarity index 97% rename from cmvr-es/service/grpc/include/grpc_camera_service.h rename to cmvr-es/service/grpc/server/include/grpc_camera_service.h index c6c2f07d..799647e0 100644 --- a/cmvr-es/service/grpc/include/grpc_camera_service.h +++ b/cmvr-es/service/grpc/server/include/grpc_camera_service.h @@ -11,7 +11,7 @@ #include "common/base/grpc_utils.h" #include "manager/device_manager/include/device_manager.h" #include "devices/camera/abstract_camera.h" -#include "service/grpc/include/grpc_camera_stream_policy.h" +#include "service/grpc/server/include/grpc_camera_stream_policy.h" namespace cmvr::service { diff --git a/cmvr-es/service/grpc/include/grpc_camera_stream_policy.h b/cmvr-es/service/grpc/server/include/grpc_camera_stream_policy.h similarity index 100% rename from cmvr-es/service/grpc/include/grpc_camera_stream_policy.h rename to cmvr-es/service/grpc/server/include/grpc_camera_stream_policy.h diff --git a/cmvr-es/service/grpc/include/grpc_command_transaction.h b/cmvr-es/service/grpc/server/include/grpc_command_transaction.h similarity index 95% rename from cmvr-es/service/grpc/include/grpc_command_transaction.h rename to cmvr-es/service/grpc/server/include/grpc_command_transaction.h index 94818f26..5008ce21 100644 --- a/cmvr-es/service/grpc/include/grpc_command_transaction.h +++ b/cmvr-es/service/grpc/server/include/grpc_command_transaction.h @@ -11,8 +11,8 @@ #include #include "cmvr/api/common.pb.h" -#include "manager/safety/include/safety_coordinator.h" -#include "service/grpc/include/grpc_security.h" +#include "manager/safety_manager/include/safety_manager.h" +#include "service/grpc/server/include/grpc_security.h" namespace cmvr::service { @@ -38,7 +38,7 @@ struct GrpcStreamingSafetyOpen { class GrpcStreamingSafetySession final { public: GrpcStreamingSafetySession( - safety::SafetyCoordinator& coordinator, + safety::SafetyManager& coordinator, const GrpcRequestContext& request_context, GrpcStreamingSafetyOpen open); @@ -67,7 +67,7 @@ public: private: void reject_(safety::SafetyReason reason, std::string detail); - safety::SafetyCoordinator* coordinator_{nullptr}; + safety::SafetyManager* coordinator_{nullptr}; std::optional permit_; safety::AdmissionDecision admission_decision_; grpc::Status status_; @@ -79,7 +79,7 @@ private: class GrpcCommandTransaction final { public: GrpcCommandTransaction( - safety::SafetyCoordinator& coordinator, + safety::SafetyManager& coordinator, GrpcRequestContext request_context, GrpcMethodPolicy method_policy, const google::protobuf::Message& request, @@ -153,7 +153,7 @@ private: const std::string& detail); void abandon_() noexcept; - safety::SafetyCoordinator* coordinator_{nullptr}; + safety::SafetyManager* coordinator_{nullptr}; GrpcRequestContext request_context_; GrpcMethodPolicy method_policy_; google::protobuf::Message* response_{nullptr}; @@ -181,7 +181,7 @@ using GrpcUnaryCommandOperation = grpc::Status executeRegisteredGrpcCommand( const std::shared_ptr& gateway, grpc::ServerContext* server_context, - safety::SafetyCoordinator& coordinator, + safety::SafetyManager& coordinator, const std::string& full_method_name, const google::protobuf::Message* request, google::protobuf::Message* response, @@ -194,7 +194,7 @@ grpc::Status executeRegisteredGrpcCommand( grpc::Status executeServerDerivedGrpcCommand( const std::shared_ptr& gateway, grpc::ServerContext* server_context, - safety::SafetyCoordinator& coordinator, + safety::SafetyManager& coordinator, const std::string& full_method_name, GrpcMethodPolicy effective_policy, const google::protobuf::Message* request, diff --git a/cmvr-es/service/grpc/include/grpc_dexhand_service.h b/cmvr-es/service/grpc/server/include/grpc_dexhand_service.h similarity index 100% rename from cmvr-es/service/grpc/include/grpc_dexhand_service.h rename to cmvr-es/service/grpc/server/include/grpc_dexhand_service.h diff --git a/cmvr-es/service/grpc/include/grpc_error_logging_interceptor.h b/cmvr-es/service/grpc/server/include/grpc_error_logging_interceptor.h similarity index 100% rename from cmvr-es/service/grpc/include/grpc_error_logging_interceptor.h rename to cmvr-es/service/grpc/server/include/grpc_error_logging_interceptor.h diff --git a/cmvr-es/service/grpc/include/grpc_head_service.h b/cmvr-es/service/grpc/server/include/grpc_head_service.h similarity index 100% rename from cmvr-es/service/grpc/include/grpc_head_service.h rename to cmvr-es/service/grpc/server/include/grpc_head_service.h diff --git a/cmvr-es/service/grpc/include/grpc_hlc_service.h b/cmvr-es/service/grpc/server/include/grpc_hlc_service.h similarity index 100% rename from cmvr-es/service/grpc/include/grpc_hlc_service.h rename to cmvr-es/service/grpc/server/include/grpc_hlc_service.h diff --git a/cmvr-es/service/grpc/include/grpc_microphone_service.h b/cmvr-es/service/grpc/server/include/grpc_microphone_service.h similarity index 100% rename from cmvr-es/service/grpc/include/grpc_microphone_service.h rename to cmvr-es/service/grpc/server/include/grpc_microphone_service.h diff --git a/cmvr-es/service/grpc/include/grpc_motor_service.h b/cmvr-es/service/grpc/server/include/grpc_motor_service.h similarity index 99% rename from cmvr-es/service/grpc/include/grpc_motor_service.h rename to cmvr-es/service/grpc/server/include/grpc_motor_service.h index bbcd54f4..8d7a11d8 100644 --- a/cmvr-es/service/grpc/include/grpc_motor_service.h +++ b/cmvr-es/service/grpc/server/include/grpc_motor_service.h @@ -10,7 +10,7 @@ #include "cmvr/api/motor_service.grpc.pb.h" #include "devices/motor/abstract_motor.h" -#include "service/grpc/include/motor_activity_coordinator.h" +#include "service/grpc/server/include/motor_activity_coordinator.h" namespace cmvr::device { class DeviceManager; diff --git a/cmvr-es/service/grpc/include/grpc_recovery_audit.h b/cmvr-es/service/grpc/server/include/grpc_recovery_audit.h similarity index 100% rename from cmvr-es/service/grpc/include/grpc_recovery_audit.h rename to cmvr-es/service/grpc/server/include/grpc_recovery_audit.h diff --git a/cmvr-es/service/grpc/include/grpc_robot_arm_teleop_backend.h b/cmvr-es/service/grpc/server/include/grpc_robot_arm_teleop_backend.h similarity index 89% rename from cmvr-es/service/grpc/include/grpc_robot_arm_teleop_backend.h rename to cmvr-es/service/grpc/server/include/grpc_robot_arm_teleop_backend.h index c15c3562..39d241ba 100644 --- a/cmvr-es/service/grpc/include/grpc_robot_arm_teleop_backend.h +++ b/cmvr-es/service/grpc/server/include/grpc_robot_arm_teleop_backend.h @@ -4,7 +4,7 @@ #include "cmvr/config/grpc_server_config/grpc_server_config.pb.h" #include "devices/arm/robot_arm.h" -#include "service/grpc/include/grpc_arm_teleop_service.h" +#include "service/grpc/server/include/grpc_arm_teleop_service.h" namespace cmvr::service { diff --git a/cmvr-es/service/grpc/include/grpc_safety_participants.h b/cmvr-es/service/grpc/server/include/grpc_safety_participants.h similarity index 92% rename from cmvr-es/service/grpc/include/grpc_safety_participants.h rename to cmvr-es/service/grpc/server/include/grpc_safety_participants.h index d3fe5328..bb4252b4 100644 --- a/cmvr-es/service/grpc/include/grpc_safety_participants.h +++ b/cmvr-es/service/grpc/server/include/grpc_safety_participants.h @@ -3,7 +3,7 @@ #include namespace cmvr::safety { -class SafetyCoordinator; +class SafetyManager; } namespace cmvr::service { @@ -26,7 +26,7 @@ public: private: friend std::unique_ptr registerGrpcSafetyParticipants( - safety::SafetyCoordinator&, + safety::SafetyManager&, std::shared_ptr, std::shared_ptr); struct Impl; @@ -36,7 +36,7 @@ private: std::unique_ptr registerGrpcSafetyParticipants( - safety::SafetyCoordinator& coordinator, + safety::SafetyManager& coordinator, std::shared_ptr action_queue, std::shared_ptr stop_dispatcher); diff --git a/cmvr-es/service/grpc/include/grpc_safety_proto.h b/cmvr-es/service/grpc/server/include/grpc_safety_proto.h similarity index 95% rename from cmvr-es/service/grpc/include/grpc_safety_proto.h rename to cmvr-es/service/grpc/server/include/grpc_safety_proto.h index 68515d9f..c5bbae99 100644 --- a/cmvr-es/service/grpc/include/grpc_safety_proto.h +++ b/cmvr-es/service/grpc/server/include/grpc_safety_proto.h @@ -1,7 +1,7 @@ #pragma once #include "cmvr/api/safety_command.pb.h" -#include "manager/safety/include/safety_coordinator.h" +#include "manager/safety_manager/include/safety_manager.h" namespace cmvr::service { diff --git a/cmvr-es/service/grpc/include/grpc_security.h b/cmvr-es/service/grpc/server/include/grpc_security.h similarity index 99% rename from cmvr-es/service/grpc/include/grpc_security.h rename to cmvr-es/service/grpc/server/include/grpc_security.h index 9ed1cf01..9e8de77f 100644 --- a/cmvr-es/service/grpc/include/grpc_security.h +++ b/cmvr-es/service/grpc/server/include/grpc_security.h @@ -13,7 +13,7 @@ #include #include "cmvr/config/grpc_server_config/grpc_server_config.pb.h" -#include "manager/safety/include/safety_types.h" +#include "manager/safety_manager/include/safety_types.h" namespace cmvr::service { diff --git a/cmvr-es/service/grpc/include/grpc_speaker_service.h b/cmvr-es/service/grpc/server/include/grpc_speaker_service.h similarity index 100% rename from cmvr-es/service/grpc/include/grpc_speaker_service.h rename to cmvr-es/service/grpc/server/include/grpc_speaker_service.h diff --git a/cmvr-es/service/grpc/include/grpc_system_service.h b/cmvr-es/service/grpc/server/include/grpc_system_service.h similarity index 100% rename from cmvr-es/service/grpc/include/grpc_system_service.h rename to cmvr-es/service/grpc/server/include/grpc_system_service.h diff --git a/cmvr-es/service/grpc/include/media_activity_coordinator.h b/cmvr-es/service/grpc/server/include/media_activity_coordinator.h similarity index 98% rename from cmvr-es/service/grpc/include/media_activity_coordinator.h rename to cmvr-es/service/grpc/server/include/media_activity_coordinator.h index d234c0b4..b9f0c4d9 100644 --- a/cmvr-es/service/grpc/include/media_activity_coordinator.h +++ b/cmvr-es/service/grpc/server/include/media_activity_coordinator.h @@ -8,7 +8,7 @@ #include #include -#include "service/stop_all/include/deferred_stop_operation.h" +#include "service/grpc/stop_all/include/deferred_stop_operation.h" namespace cmvr::service { diff --git a/cmvr-es/service/grpc/include/motor_activity_coordinator.h b/cmvr-es/service/grpc/server/include/motor_activity_coordinator.h similarity index 98% rename from cmvr-es/service/grpc/include/motor_activity_coordinator.h rename to cmvr-es/service/grpc/server/include/motor_activity_coordinator.h index 6692482b..b3c14483 100644 --- a/cmvr-es/service/grpc/include/motor_activity_coordinator.h +++ b/cmvr-es/service/grpc/server/include/motor_activity_coordinator.h @@ -9,7 +9,7 @@ #include #include -#include "service/stop_all/include/deferred_stop_operation.h" +#include "service/grpc/stop_all/include/deferred_stop_operation.h" namespace cmvr::service { diff --git a/cmvr-es/service/grpc/src/camera_operational_activity_registry.cpp b/cmvr-es/service/grpc/server/src/camera_operational_activity_registry.cpp similarity index 98% rename from cmvr-es/service/grpc/src/camera_operational_activity_registry.cpp rename to cmvr-es/service/grpc/server/src/camera_operational_activity_registry.cpp index 32e769a8..55607cb7 100644 --- a/cmvr-es/service/grpc/src/camera_operational_activity_registry.cpp +++ b/cmvr-es/service/grpc/server/src/camera_operational_activity_registry.cpp @@ -1,9 +1,9 @@ -#include "service/grpc/include/camera_operational_activity_registry.h" +#include "service/grpc/server/include/camera_operational_activity_registry.h" #include #include -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" namespace cmvr::service { namespace { diff --git a/cmvr-es/service/grpc/src/camera_ptz_activity_registry.cpp b/cmvr-es/service/grpc/server/src/camera_ptz_activity_registry.cpp similarity index 98% rename from cmvr-es/service/grpc/src/camera_ptz_activity_registry.cpp rename to cmvr-es/service/grpc/server/src/camera_ptz_activity_registry.cpp index a1a50f5e..609c0807 100644 --- a/cmvr-es/service/grpc/src/camera_ptz_activity_registry.cpp +++ b/cmvr-es/service/grpc/server/src/camera_ptz_activity_registry.cpp @@ -1,10 +1,10 @@ -#include "service/grpc/include/camera_ptz_activity_registry.h" +#include "service/grpc/server/include/camera_ptz_activity_registry.h" #include #include #include -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" namespace cmvr::service { diff --git a/cmvr-es/service/grpc/src/grpc_agv_service.cpp b/cmvr-es/service/grpc/server/src/grpc_agv_service.cpp similarity index 97% rename from cmvr-es/service/grpc/src/grpc_agv_service.cpp rename to cmvr-es/service/grpc/server/src/grpc_agv_service.cpp index c04ac789..319b9455 100644 --- a/cmvr-es/service/grpc/src/grpc_agv_service.cpp +++ b/cmvr-es/service/grpc/server/src/grpc_agv_service.cpp @@ -1,4 +1,4 @@ -#include "service/grpc/include/grpc_agv_service.h" +#include "service/grpc/server/include/grpc_agv_service.h" #include #include @@ -11,10 +11,10 @@ #include #include "common/base/logging/logger.h" -#include "manager/control_authority/include/control_authority_manager.h" -#include "service/grpc/include/grpc_command_transaction.h" -#include "service/grpc/include/grpc_security.h" -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "manager/control_authority_manager/include/control_authority_manager.h" +#include "service/grpc/server/include/grpc_command_transaction.h" +#include "service/grpc/server/include/grpc_security.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" using google::protobuf::util::TimeUtil; @@ -668,7 +668,7 @@ grpc::Status gRPCAgvServiceImpl::emergencyStop(grpc::ServerContext* context, api::CommandHeader_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.AgvService/emergencyStop", request, response, [this, request, response](GrpcCommandTransaction& command) { const std::string device_id = request->device_id(); @@ -696,7 +696,7 @@ grpc::Status gRPCAgvServiceImpl::clearFault(grpc::ServerContext* context, api::CommandHeader_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.AgvService/clearFault", request, response, [this, request, response](GrpcCommandTransaction& command) { const std::string device_id = request->device_id(); @@ -727,7 +727,7 @@ grpc::Status gRPCAgvServiceImpl::navigateToPose(grpc::ServerContext* context, api::AgvNavigateToPoseCommand_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.AgvService/navigateToPose", request, response, [this, context, request, response](GrpcCommandTransaction& command) { if (context && context->IsCancelled()) { @@ -766,7 +766,7 @@ grpc::Status gRPCAgvServiceImpl::navigateToStation(grpc::ServerContext* context, api::AgvNavigateToStationCommand_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.AgvService/navigateToStation", request, response, [this, context, request, response](GrpcCommandTransaction& command) { if (context && context->IsCancelled()) { @@ -806,7 +806,7 @@ grpc::Status gRPCAgvServiceImpl::followPath(grpc::ServerContext* context, api::AgvFollowPathCommand_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.AgvService/followPath", request, response, [this, context, request, response](GrpcCommandTransaction& command) { if (context && context->IsCancelled()) { @@ -854,7 +854,7 @@ grpc::Status gRPCAgvServiceImpl::translate( api::AgvTranslateCommand_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.AgvService/translate", request, response, [this, context, request, response](GrpcCommandTransaction& command) { if (context && context->IsCancelled()) { @@ -892,7 +892,7 @@ grpc::Status gRPCAgvServiceImpl::pauseNavigation(grpc::ServerContext* context, api::CommandHeader_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.AgvService/pauseNavigation", request, response, [this, request, response](GrpcCommandTransaction& command) { const std::string device_id = request->device_id(); @@ -924,7 +924,7 @@ grpc::Status gRPCAgvServiceImpl::resumeNavigation(grpc::ServerContext* context, api::CommandHeader_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.AgvService/resumeNavigation", request, response, [this, request, response](GrpcCommandTransaction& command) { const std::string device_id = request->device_id(); @@ -956,7 +956,7 @@ grpc::Status gRPCAgvServiceImpl::cancelNavigation(grpc::ServerContext* context, api::CommandHeader_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.AgvService/cancelNavigation", request, response, [this, request, response](GrpcCommandTransaction& command) { const std::string device_id = request->device_id(); @@ -984,7 +984,7 @@ grpc::Status gRPCAgvServiceImpl::setVelocity(grpc::ServerContext* context, api::AgvSetVelocityCommand_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.AgvService/setVelocity", request, response, [this, request, response](GrpcCommandTransaction& command) { const std::string device_id = request->header().device_id(); @@ -1015,7 +1015,7 @@ grpc::Status gRPCAgvServiceImpl::stopVelocityControl(grpc::ServerContext* contex api::CommandHeader_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.AgvService/stopVelocityControl", request, response, [this, request, response](GrpcCommandTransaction& command) { const std::string device_id = request->device_id(); @@ -1095,7 +1095,7 @@ grpc::Status gRPCAgvServiceImpl::switchMap(grpc::ServerContext* context, api::AgvMapCommand_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.AgvService/switchMap", request, response, [this, request, response](GrpcCommandTransaction& command) { const std::string device_id = request->header().device_id(); @@ -1126,7 +1126,7 @@ grpc::Status gRPCAgvServiceImpl::uploadMap(grpc::ServerContext* context, api::AgvMapCommand_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.AgvService/uploadMap", request, response, [this, request, response](GrpcCommandTransaction& command) { const std::string device_id = request->header().device_id(); @@ -1181,7 +1181,7 @@ grpc::Status gRPCAgvServiceImpl::startMapping(grpc::ServerContext* context, api::AgvStartMappingCommand_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.AgvService/startMapping", request, response, [this, request, response](GrpcCommandTransaction& command) { const std::string device_id = request->header().device_id(); @@ -1292,7 +1292,7 @@ grpc::Status gRPCAgvServiceImpl::stopMapping(grpc::ServerContext* context, api::CommandHeader_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.AgvService/stopMapping", request, response, [this, request, response](GrpcCommandTransaction& command) { const std::string device_id = request->device_id(); diff --git a/cmvr-es/service/grpc/src/grpc_arm_service.cpp b/cmvr-es/service/grpc/server/src/grpc_arm_service.cpp similarity index 97% rename from cmvr-es/service/grpc/src/grpc_arm_service.cpp rename to cmvr-es/service/grpc/server/src/grpc_arm_service.cpp index 8ffda776..3c04f608 100644 --- a/cmvr-es/service/grpc/src/grpc_arm_service.cpp +++ b/cmvr-es/service/grpc/server/src/grpc_arm_service.cpp @@ -1,4 +1,4 @@ -#include "service/grpc/include/grpc_arm_service.h" +#include "service/grpc/server/include/grpc_arm_service.h" #include #include @@ -7,10 +7,10 @@ #include #include "common/base/logging/logger.h" -#include "manager/control_authority/include/control_authority_manager.h" -#include "service/grpc/include/grpc_command_transaction.h" -#include "service/grpc/include/grpc_security.h" -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "manager/control_authority_manager/include/control_authority_manager.h" +#include "service/grpc/server/include/grpc_command_transaction.h" +#include "service/grpc/server/include/grpc_security.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" using google::protobuf::util::TimeUtil; @@ -381,7 +381,7 @@ grpc::Status gRPCArmServiceImpl::torqueOff(grpc::ServerContext* context, api::CommandHeader_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.ArmService/torqueOff", request, response, [this, request, response](GrpcCommandTransaction& command) { const std::string device_id = request->device_id(); @@ -415,7 +415,7 @@ grpc::Status gRPCArmServiceImpl::torqueOn(grpc::ServerContext* context, api::CommandHeader_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.ArmService/torqueOn", request, response, [this, context, request, response](GrpcCommandTransaction& command) { const std::string device_id = request->device_id(); @@ -471,7 +471,7 @@ grpc::Status gRPCArmServiceImpl::moveJ(grpc::ServerContext* context, api::MoveJ_Response* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.ArmService/moveJ", request, response, [this, context, request, response](GrpcCommandTransaction& command) { const std::string device_id = request->header().device_id(); @@ -511,7 +511,7 @@ grpc::Status gRPCArmServiceImpl::moveL(grpc::ServerContext* context, api::MoveL_Response* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.ArmService/moveL", request, response, [this, context, request, response](GrpcCommandTransaction& command) { const std::string device_id = request->header().device_id(); @@ -553,7 +553,7 @@ grpc::Status gRPCArmServiceImpl::speedJ(grpc::ServerContext* context, api::SpeedJ_Response* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.ArmService/speedJ", request, response, [this, request, response](GrpcCommandTransaction& command) { const std::string device_id = request->header().device_id(); @@ -593,7 +593,7 @@ grpc::Status gRPCArmServiceImpl::speedL(grpc::ServerContext* context, api::SpeedL_Response* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.ArmService/speedL", request, response, [this, request, response](GrpcCommandTransaction& command) { const std::string device_id = request->header().device_id(); @@ -634,7 +634,7 @@ grpc::Status gRPCArmServiceImpl::servoJ(grpc::ServerContext* context, api::ServoJ_Response* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.ArmService/servoJ", request, response, [this, request, response](GrpcCommandTransaction& command) { const std::string device_id = request->header().device_id(); @@ -670,7 +670,7 @@ grpc::Status gRPCArmServiceImpl::stopMotion(grpc::ServerContext* context, api::CommandHeader_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.ArmService/stopMotion", request, response, [this, request, response](GrpcCommandTransaction& command) { const std::string device_id = request->device_id(); @@ -763,7 +763,7 @@ grpc::Status gRPCArmServiceImpl::calibrateZeroQ(grpc::ServerContext* context, api::CalibrateZeroQ_Response* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.ArmService/calibrateZeroQ", request, response, [this, request, response](GrpcCommandTransaction& command) { const std::string device_id = request->header().device_id(); @@ -821,7 +821,7 @@ grpc::Status gRPCArmServiceImpl::ExecuteJsonCommand( api::JsonDeviceCommand_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.ArmService/ExecuteJsonCommand", request, response, [this, request, response](GrpcCommandTransaction& command) { const std::string device_id = request->header().device_id(); @@ -870,7 +870,7 @@ grpc::Status gRPCArmServiceImpl::clearFault(grpc::ServerContext *context, cmvr::api::CommandHeader_Feedback *response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.ArmService/clearFault", request, response, [this, request, response](GrpcCommandTransaction& command) { const std::string device_id = request->device_id(); diff --git a/cmvr-es/service/grpc/src/grpc_arm_teleop_service.cpp b/cmvr-es/service/grpc/server/src/grpc_arm_teleop_service.cpp similarity index 99% rename from cmvr-es/service/grpc/src/grpc_arm_teleop_service.cpp rename to cmvr-es/service/grpc/server/src/grpc_arm_teleop_service.cpp index 486659ed..b2f5d809 100644 --- a/cmvr-es/service/grpc/src/grpc_arm_teleop_service.cpp +++ b/cmvr-es/service/grpc/server/src/grpc_arm_teleop_service.cpp @@ -1,4 +1,4 @@ -#include "service/grpc/include/grpc_arm_teleop_service.h" +#include "service/grpc/server/include/grpc_arm_teleop_service.h" #include #include @@ -14,9 +14,9 @@ #include #include -#include "service/stop_all/include/stop_all_admission_gate.h" -#include "service/grpc/include/grpc_command_transaction.h" -#include "service/grpc/include/grpc_security.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" +#include "service/grpc/server/include/grpc_command_transaction.h" +#include "service/grpc/server/include/grpc_security.h" namespace cmvr::service { @@ -440,7 +440,7 @@ ArmTeleopServiceImpl::ArmTeleopServiceImpl( std::shared_ptr backend, control::ControlAuthorityManager* authority, std::shared_ptr security_gateway, - safety::SafetyCoordinator* safety_coordinator) + safety::SafetyManager* safety_manager) : backend_(std::move(backend)), authority_( authority ? authority @@ -448,7 +448,7 @@ ArmTeleopServiceImpl::ArmTeleopServiceImpl( security_gateway_(security_gateway ? std::move(security_gateway) : makeDefaultGrpcSecurityGateway()), - safety_coordinator_(safety_coordinator) + safety_manager_(safety_manager) { if (!backend_) { backend_ = makeDisabledArmTeleopBackend(); @@ -541,7 +541,7 @@ grpc::Status ArmTeleopServiceImpl::Teleoperate( }); std::optional safety_session; - if (safety_coordinator_) { + if (safety_manager_) { GrpcStreamingSafetyOpen safety_open; safety_open.full_method_name = "/cmvr.api.armteleop.v1.ArmTeleopService/Teleoperate"; @@ -550,7 +550,7 @@ grpc::Status ArmTeleopServiceImpl::Teleoperate( safety_open.authority_generation = control_lease.generation; safety_open.deadline = cmvr_grpc_call_guard.context().deadline; safety_session.emplace( - *safety_coordinator_, + *safety_manager_, cmvr_grpc_call_guard.context(), std::move(safety_open)); if (!safety_session->admitted()) { diff --git a/cmvr-es/service/grpc/src/grpc_camera_service.cpp b/cmvr-es/service/grpc/server/src/grpc_camera_service.cpp similarity index 97% rename from cmvr-es/service/grpc/src/grpc_camera_service.cpp rename to cmvr-es/service/grpc/server/src/grpc_camera_service.cpp index 4c590814..3c7bc9b9 100644 --- a/cmvr-es/service/grpc/src/grpc_camera_service.cpp +++ b/cmvr-es/service/grpc/server/src/grpc_camera_service.cpp @@ -1,10 +1,10 @@ #include "common/base/logging/logger.h" -#include "manager/media_source_hub/include/device_media_source_adapter.h" -#include "service/grpc/include/camera_operational_activity_registry.h" -#include "service/grpc/include/camera_ptz_activity_registry.h" -#include "service/grpc/include/grpc_command_transaction.h" -#include "service/grpc/include/media_activity_coordinator.h" -#include "service/grpc/include/grpc_security.h" +#include "manager/media_source_manager/include/device_media_source_adapter.h" +#include "service/grpc/server/include/camera_operational_activity_registry.h" +#include "service/grpc/server/include/camera_ptz_activity_registry.h" +#include "service/grpc/server/include/grpc_command_transaction.h" +#include "service/grpc/server/include/media_activity_coordinator.h" +#include "service/grpc/server/include/grpc_security.h" // // Created by xtkuang on 2025/6/1. // @@ -72,7 +72,7 @@ bool toPtzCommand(cmvr::api::ControlPtzCommand_Command command, PtzCommand& out) } // The legacy depth/RGBD RPCs acquire the camera's shared producer directly -// instead of going through MediaSourceHub. Keep that lease exception-safe: +// instead of going through MediaSourceManager. Keep that lease exception-safe: // cancellation, a failed Write(), or any conversion error must release exactly // the one startStreaming() reference acquired by this call. class CameraStreamingLease final { @@ -80,7 +80,7 @@ public: CameraStreamingLease( std::shared_ptr camera, const MediaActivityCoordinator::Session& session, - cmvr::safety::SafetyCoordinator& coordinator) + cmvr::safety::SafetyManager& coordinator) : camera_(std::move(camera)) { (void)session.runIfCurrent([this, &coordinator] { auto dispatch = cmvr::media::beginMediaSourceStartDispatch( @@ -184,7 +184,7 @@ grpc::Status gRPCCameraServiceImpl::StartCamera(grpc::ServerContext* context, const api::StartCameraCommand_Request* request, api::StartCameraCommand_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.CameraService/StartCamera", request, response, [this, request, response](GrpcCommandTransaction& command) { auto media_session = globalMediaActivityCoordinator().beginSession(); @@ -234,7 +234,7 @@ grpc::Status gRPCCameraServiceImpl::StopCamera(grpc::ServerContext* context, const api::StopCameraCommand_Request* request, api::StopCameraCommand_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.CameraService/StopCamera", request, response, [this, request, response](GrpcCommandTransaction& command) { string dev_id = request->header().device_id(); @@ -502,7 +502,7 @@ grpc::Status gRPCCameraServiceImpl::StartRecording(grpc::ServerContext* context, const api::StartCameraRecordingCommand_Request* request, api::StartCameraRecordingCommand_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.CameraService/StartRecording", request, response, [this, request, response](GrpcCommandTransaction& command) { auto media_session = globalMediaActivityCoordinator().beginSession(); @@ -540,7 +540,7 @@ grpc::Status gRPCCameraServiceImpl::StopRecording(grpc::ServerContext* context, const api::StopCameraRecordingCommand_Request* request, api::StopCameraRecordingCommand_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.CameraService/StopRecording", request, response, [this, request, response](GrpcCommandTransaction& command) { string dev_id = request->header().device_id(); @@ -581,7 +581,7 @@ grpc::Status gRPCCameraServiceImpl::ControlPtz(grpc::ServerContext* context, } return executeServerDerivedGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.CameraService/ControlPtz", std::move(effective_policy), request, response, [this, request, response](GrpcCommandTransaction& command_tx) { @@ -666,7 +666,7 @@ grpc::Status gRPCCameraServiceImpl::GetDepthImageStream(grpc::ServerContext* con return grpc::Status::OK; } CameraStreamingLease stream_lease( - dev, media_session, dmgr_.safetyCoordinator()); + dev, media_session, dmgr_.safetyManager()); if (!stream_lease) { api::GetDepthImageStreamCommand_Feedback response; response.mutable_header()->set_success(false); @@ -763,7 +763,7 @@ grpc::Status gRPCCameraServiceImpl::GetRGBDImagesStream(grpc::ServerContext* con return grpc::Status::OK; } CameraStreamingLease stream_lease( - dev, media_session, dmgr_.safetyCoordinator()); + dev, media_session, dmgr_.safetyManager()); if (!stream_lease) { api::GetRGBDImagesStreamCommand_Feedback response; response.mutable_header()->set_success(false); @@ -867,7 +867,7 @@ grpc::Status gRPCCameraServiceImpl::GetRGBImageStream(grpc::ServerContext* conte stream->Write(response); return grpc::Status::OK; } - auto& media_hub = cmvr::media::globalMediaSourceHub(); + auto& media_hub = cmvr::media::globalMediaSourceManager(); const std::string track_id = cmvr::media::cameraColorTrackId(dev_id); bool source_ready = false; const bool source_setup_allowed = media_session.runIfCurrent([&] { @@ -885,15 +885,15 @@ grpc::Status gRPCCameraServiceImpl::GetRGBImageStream(grpc::ServerContext* conte return grpc::Status::OK; } auto source_dispatch = cmvr::media::beginMediaSourceStartDispatch( - dmgr_.safetyCoordinator(), dev_id); + dmgr_.safetyManager(), dev_id); auto subscription = source_dispatch.acquired() ? media_hub.subscribe( track_id, - cmvr::media::MediaSourceHub::StartPosition::NEXT_PUBLISHED, + cmvr::media::MediaSourceManager::StartPosition::NEXT_PUBLISHED, [context, &media_session] { return context->IsCancelled() || media_session.cancelled(); }) - : cmvr::media::MediaSourceHub::Subscription{}; + : cmvr::media::MediaSourceManager::Subscription{}; if (!subscription) { api::GetRGBImageStreamCommand_Feedback response; response.mutable_header()->set_success(false); diff --git a/cmvr-es/service/grpc/src/grpc_command_transaction.cpp b/cmvr-es/service/grpc/server/src/grpc_command_transaction.cpp similarity index 99% rename from cmvr-es/service/grpc/src/grpc_command_transaction.cpp rename to cmvr-es/service/grpc/server/src/grpc_command_transaction.cpp index f097ea11..bba5b75e 100644 --- a/cmvr-es/service/grpc/src/grpc_command_transaction.cpp +++ b/cmvr-es/service/grpc/server/src/grpc_command_transaction.cpp @@ -1,4 +1,4 @@ -#include "service/grpc/include/grpc_command_transaction.h" +#include "service/grpc/server/include/grpc_command_transaction.h" #include #include @@ -15,7 +15,7 @@ #include #include -#include "service/grpc/include/grpc_safety_proto.h" +#include "service/grpc/server/include/grpc_safety_proto.h" namespace cmvr::service { @@ -145,7 +145,7 @@ std::uint64_t stableHash( } bool isEnforced( - const safety::SafetyCoordinatorConfig& config, + const safety::SafetyManagerConfig& config, const std::string& device_id) { switch (config.enforcement_mode) { @@ -316,7 +316,7 @@ grpc::Status grpcStatusForSafetyReason( } GrpcStreamingSafetySession::GrpcStreamingSafetySession( - safety::SafetyCoordinator& coordinator, + safety::SafetyManager& coordinator, const GrpcRequestContext& request_context, GrpcStreamingSafetyOpen open) : coordinator_(&coordinator), @@ -469,7 +469,7 @@ std::string deterministicGrpcPayloadHash( } GrpcCommandTransaction::GrpcCommandTransaction( - safety::SafetyCoordinator& coordinator, + safety::SafetyManager& coordinator, GrpcRequestContext request_context, GrpcMethodPolicy method_policy, const google::protobuf::Message& request, @@ -1166,7 +1166,7 @@ void GrpcCommandTransaction::abandon_() noexcept grpc::Status executeRegisteredGrpcCommand( const std::shared_ptr& gateway, grpc::ServerContext* server_context, - safety::SafetyCoordinator& coordinator, + safety::SafetyManager& coordinator, const std::string& full_method_name, const google::protobuf::Message* request, google::protobuf::Message* response, @@ -1208,7 +1208,7 @@ grpc::Status executeRegisteredGrpcCommand( grpc::Status executeServerDerivedGrpcCommand( const std::shared_ptr& gateway, grpc::ServerContext* server_context, - safety::SafetyCoordinator& coordinator, + safety::SafetyManager& coordinator, const std::string& full_method_name, GrpcMethodPolicy effective_policy, const google::protobuf::Message* request, diff --git a/cmvr-es/service/grpc/src/grpc_dexhand_service.cpp b/cmvr-es/service/grpc/server/src/grpc_dexhand_service.cpp similarity index 98% rename from cmvr-es/service/grpc/src/grpc_dexhand_service.cpp rename to cmvr-es/service/grpc/server/src/grpc_dexhand_service.cpp index f2b2f2f1..0e69af20 100644 --- a/cmvr-es/service/grpc/src/grpc_dexhand_service.cpp +++ b/cmvr-es/service/grpc/server/src/grpc_dexhand_service.cpp @@ -15,11 +15,11 @@ #include #include "devices/dexhand/rh56dftp_dexhand/include/rh56dftp_dexhand.h" -#include "manager/control_authority/include/control_authority_manager.h" -#include "service/grpc/include/grpc_command_transaction.h" -#include "service/grpc/include/media_activity_coordinator.h" -#include "service/grpc/include/grpc_security.h" -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "manager/control_authority_manager/include/control_authority_manager.h" +#include "service/grpc/server/include/grpc_command_transaction.h" +#include "service/grpc/server/include/media_activity_coordinator.h" +#include "service/grpc/server/include/grpc_security.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" using namespace std; using namespace cmvr::service; @@ -367,7 +367,7 @@ grpc::Status gRPCDexHandServiceImpl::SetDexHandPos(grpc::ServerContext* context , const cmvr::api::SetDexHandPositionsCommand_Request* request , cmvr::api::SetDexHandPositionsCommand_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.DexHandService/SetDexHandPos", request, response, [this, request, response](GrpcCommandTransaction& command) { string dev_id = request->header().device_id(); @@ -415,7 +415,7 @@ grpc::Status gRPCDexHandServiceImpl::SetDexHandAngle(grpc::ServerContext* contex , const cmvr::api::SetDexHandAnglesCommand_Request* request , cmvr::api::SetDexHandAnglesCommand_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.DexHandService/SetDexHandAngle", request, response, [this, request, response](GrpcCommandTransaction& command) { string dev_id = request->header().device_id(); @@ -477,7 +477,7 @@ grpc::Status gRPCDexHandServiceImpl::SetDexHandForce(grpc::ServerContext* contex , const cmvr::api::SetDexHandForceCommand_Request* request , cmvr::api::SetDexHandForceCommand_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.DexHandService/SetDexHandForce", request, response, [this, request, response](GrpcCommandTransaction& command) { string dev_id = request->header().device_id(); @@ -525,7 +525,7 @@ grpc::Status gRPCDexHandServiceImpl::SetDexHandSpeed(grpc::ServerContext* contex , const cmvr::api::SetDexHandSpeedCommand_Request* request , cmvr::api::SetDexHandSpeedCommand_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.DexHandService/SetDexHandSpeed", request, response, [this, request, response](GrpcCommandTransaction& command) { string dev_id = request->header().device_id(); @@ -573,7 +573,7 @@ grpc::Status gRPCDexHandServiceImpl::SetDexHandPresetAct(grpc::ServerContext* co , const cmvr::api::SetDexHandPresetActCommand_Request* request , cmvr::api::SetDexHandPresetActCommand_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.DexHandService/SetDexHandPresetAct", request, response, [this, request, response](GrpcCommandTransaction& command) { string dev_id = request->header().device_id(); diff --git a/cmvr-es/service/grpc/src/grpc_error_logging_interceptor.cpp b/cmvr-es/service/grpc/server/src/grpc_error_logging_interceptor.cpp similarity index 99% rename from cmvr-es/service/grpc/src/grpc_error_logging_interceptor.cpp rename to cmvr-es/service/grpc/server/src/grpc_error_logging_interceptor.cpp index ecbe3da9..d8a7352a 100644 --- a/cmvr-es/service/grpc/src/grpc_error_logging_interceptor.cpp +++ b/cmvr-es/service/grpc/server/src/grpc_error_logging_interceptor.cpp @@ -1,4 +1,4 @@ -#include "service/grpc/include/grpc_error_logging_interceptor.h" +#include "service/grpc/server/include/grpc_error_logging_interceptor.h" #include #include diff --git a/cmvr-es/service/grpc/src/grpc_head_service.cpp b/cmvr-es/service/grpc/server/src/grpc_head_service.cpp similarity index 98% rename from cmvr-es/service/grpc/src/grpc_head_service.cpp rename to cmvr-es/service/grpc/server/src/grpc_head_service.cpp index aa541d67..edfe5198 100644 --- a/cmvr-es/service/grpc/src/grpc_head_service.cpp +++ b/cmvr-es/service/grpc/server/src/grpc_head_service.cpp @@ -5,10 +5,10 @@ #include "manager/device_manager/include/device_manager.h" #include "common/base/grpc_utils.h" #include "biohead/biohead_esp32/include/biohead_esp32.h" -#include "service/grpc/include/grpc_command_transaction.h" -#include "service/grpc/include/media_activity_coordinator.h" -#include "service/grpc/include/grpc_security.h" -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "service/grpc/server/include/grpc_command_transaction.h" +#include "service/grpc/server/include/media_activity_coordinator.h" +#include "service/grpc/server/include/grpc_security.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" #include #include #include @@ -65,7 +65,7 @@ grpc::Status executeHeadOperationalCommand( Operation&& operation) { return executeRegisteredGrpcCommand( - security_gateway, context, device_manager.safetyCoordinator(), + security_gateway, context, device_manager.safetyManager(), full_method_name, request, response, [&device_manager, request, response, rpc_name, operation = std::forward(operation)]( @@ -245,7 +245,7 @@ grpc::Status gRPCMBioHeadServiceImpl::StreamExpression( safety_open.deadline = cmvr_grpc_call_guard.context().deadline; safety_session.emplace( - dmgr_.safetyCoordinator(), + dmgr_.safetyManager(), cmvr_grpc_call_guard.context(), std::move(safety_open)); if (!safety_session->admitted()) { @@ -417,7 +417,7 @@ grpc::Status gRPCMBioHeadServiceImpl::EmergencyStop( EmergencyStop_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.BioHeadService/EmergencyStop", request, response, [this, request, response](GrpcCommandTransaction& command) { const string dev_id = request->header().device_id(); @@ -460,7 +460,7 @@ grpc::Status gRPCMBioHeadServiceImpl::SpeakStart(grpc::ServerContext* context, c grpc::Status gRPCMBioHeadServiceImpl::SpeakStop(grpc::ServerContext* context, const cmvr::api::SpeakStop_Request* request, cmvr::api::SpeakStop_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.BioHeadService/SpeakStop", request, response, [this, request, response](GrpcCommandTransaction& command) { const string dev_id = request->header().device_id(); diff --git a/cmvr-es/service/grpc/src/grpc_hlc_service.cpp b/cmvr-es/service/grpc/server/src/grpc_hlc_service.cpp similarity index 96% rename from cmvr-es/service/grpc/src/grpc_hlc_service.cpp rename to cmvr-es/service/grpc/server/src/grpc_hlc_service.cpp index 7051d4bf..e4e4d7f1 100644 --- a/cmvr-es/service/grpc/src/grpc_hlc_service.cpp +++ b/cmvr-es/service/grpc/server/src/grpc_hlc_service.cpp @@ -14,9 +14,9 @@ #include "common/base/logging/logger.h" #include "manager/task_manager/include/task_manager.h" -#include "service/grpc/include/grpc_command_transaction.h" -#include "service/grpc/include/grpc_security.h" -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "service/grpc/server/include/grpc_command_transaction.h" +#include "service/grpc/server/include/grpc_security.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" #include "task/touch_screen_task/include/touch_screen_task.h" @@ -92,7 +92,7 @@ grpc::Status gRPCHlcServiceImpl::touch( normalized_request.mutable_header()->set_device_id(arm_id); return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.HlcService/touch", &normalized_request, response, [context, request, response, touch_task]( GrpcCommandTransaction& command) { diff --git a/cmvr-es/service/grpc/src/grpc_microphone_service.cpp b/cmvr-es/service/grpc/server/src/grpc_microphone_service.cpp similarity index 95% rename from cmvr-es/service/grpc/src/grpc_microphone_service.cpp rename to cmvr-es/service/grpc/server/src/grpc_microphone_service.cpp index 65ea67df..b18e9572 100644 --- a/cmvr-es/service/grpc/src/grpc_microphone_service.cpp +++ b/cmvr-es/service/grpc/server/src/grpc_microphone_service.cpp @@ -1,8 +1,8 @@ #include "common/base/logging/logger.h" -#include "manager/media_source_hub/include/device_media_source_adapter.h" -#include "service/grpc/include/grpc_command_transaction.h" -#include "service/grpc/include/media_activity_coordinator.h" -#include "service/grpc/include/grpc_security.h" +#include "manager/media_source_manager/include/device_media_source_adapter.h" +#include "service/grpc/server/include/grpc_command_transaction.h" +#include "service/grpc/server/include/media_activity_coordinator.h" +#include "service/grpc/server/include/grpc_security.h" #include #include #include @@ -84,7 +84,7 @@ grpc::Status gRPCMicroPhoneServiceImpl::GetStatus(grpc::ServerContext* context, grpc::Status gRPCMicroPhoneServiceImpl::StartRecord(grpc::ServerContext* context, const api::StartMicRecordingCommand_Request* request, api::StartMicRecordingCommand_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.MicPhoneService/StartRecord", request, response, [this, request, response](GrpcCommandTransaction& command) { auto media_session = globalMediaActivityCoordinator().beginSession(); @@ -131,7 +131,7 @@ grpc::Status gRPCMicroPhoneServiceImpl::StartRecord(grpc::ServerContext* context grpc::Status gRPCMicroPhoneServiceImpl::StopRecord(grpc::ServerContext* context, const api::StopMicRecordingCommand_Request* request, api::StopMicRecordingCommand_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.MicPhoneService/StopRecord", request, response, [this, request, response](GrpcCommandTransaction& command) { string dev_id = request->header().device_id(); @@ -154,7 +154,7 @@ grpc::Status gRPCMicroPhoneServiceImpl::StopRecord(grpc::ServerContext* context, grpc::Status gRPCMicroPhoneServiceImpl::PauseRecord(grpc::ServerContext* context, const api::PauseMicRecordingCommand_Request* request, api::PauseMicRecordingCommand_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.MicPhoneService/PauseRecord", request, response, [this, request, response](GrpcCommandTransaction& command) { string dev_id = request->header().device_id(); @@ -177,7 +177,7 @@ grpc::Status gRPCMicroPhoneServiceImpl::PauseRecord(grpc::ServerContext* context grpc::Status gRPCMicroPhoneServiceImpl::ResumeRecord(grpc::ServerContext* context, const api::ResumeMicRecordingCommand_Request* request, api::ResumeMicRecordingCommand_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.MicPhoneService/ResumeRecord", request, response, [this, request, response](GrpcCommandTransaction& command) { auto media_session = globalMediaActivityCoordinator().beginSession(); @@ -240,7 +240,7 @@ grpc::Status gRPCMicroPhoneServiceImpl::StreamAudio(grpc::ServerContext* context return grpc::Status::OK; } - auto& media_hub = cmvr::media::globalMediaSourceHub(); + auto& media_hub = cmvr::media::globalMediaSourceManager(); const std::string track_id = cmvr::media::microphoneTrackId(dev_id); bool source_ready = false; const bool source_setup_allowed = media_session.runIfCurrent([&] { @@ -260,15 +260,15 @@ grpc::Status gRPCMicroPhoneServiceImpl::StreamAudio(grpc::ServerContext* context } auto source_dispatch = cmvr::media::beginMediaSourceStartDispatch( - dmgr_.safetyCoordinator(), dev_id); + dmgr_.safetyManager(), dev_id); auto subscription = source_dispatch.acquired() ? media_hub.subscribe( track_id, - cmvr::media::MediaSourceHub::StartPosition::NEXT_PUBLISHED, + cmvr::media::MediaSourceManager::StartPosition::NEXT_PUBLISHED, [context, &media_session] { return context->IsCancelled() || media_session.cancelled(); }) - : cmvr::media::MediaSourceHub::Subscription{}; + : cmvr::media::MediaSourceManager::Subscription{}; if (!subscription) { api::StreamMicAudioCommand_Feedback feedback; feedback.mutable_header()->set_success(false); @@ -356,7 +356,7 @@ grpc::Status gRPCMicroPhoneServiceImpl::StreamAudio(grpc::ServerContext* context grpc::Status gRPCMicroPhoneServiceImpl::SetVolume(grpc::ServerContext* context, const api::SetMicPhoneVolumeCommand_Request* request, api::SetMicPhoneVolumeCommand_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.MicPhoneService/SetVolume", request, response, [this, request, response](GrpcCommandTransaction& command) { string dev_id = request->header().device_id(); diff --git a/cmvr-es/service/grpc/src/grpc_motor_service.cpp b/cmvr-es/service/grpc/server/src/grpc_motor_service.cpp similarity index 99% rename from cmvr-es/service/grpc/src/grpc_motor_service.cpp rename to cmvr-es/service/grpc/server/src/grpc_motor_service.cpp index 183937ca..64b67c6c 100644 --- a/cmvr-es/service/grpc/src/grpc_motor_service.cpp +++ b/cmvr-es/service/grpc/server/src/grpc_motor_service.cpp @@ -1,4 +1,4 @@ -#include "service/grpc/include/grpc_motor_service.h" +#include "service/grpc/server/include/grpc_motor_service.h" #include #include @@ -15,9 +15,9 @@ #include "common/base/logging/logger.h" #include "devices/motor/manager/include/motor_manager.h" #include "manager/device_manager/include/device_manager.h" -#include "service/grpc/include/grpc_command_transaction.h" -#include "service/grpc/include/grpc_security.h" -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "service/grpc/server/include/grpc_command_transaction.h" +#include "service/grpc/server/include/grpc_security.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" namespace cmvr::service { @@ -870,7 +870,7 @@ grpc::Status gRPCMotorServiceImpl::setZero( api::MotorCommandResponse* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.MotorService/setZero", request, response, [this, context, request, response](GrpcCommandTransaction& command) { return runUnaryGuarded( @@ -892,7 +892,7 @@ grpc::Status gRPCMotorServiceImpl::moveToZero( api::MotorCommandResponse* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.MotorService/moveToZero", request, response, [this, context, request, response](GrpcCommandTransaction& command) { return runUnaryGuarded( @@ -914,7 +914,7 @@ grpc::Status gRPCMotorServiceImpl::profilePosition( api::MotorCommandResponse* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.MotorService/profilePosition", request, response, [this, context, request, response](GrpcCommandTransaction& command) { return runUnaryGuarded( @@ -936,7 +936,7 @@ grpc::Status gRPCMotorServiceImpl::profileVelocity( api::MotorCommandResponse* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.MotorService/profileVelocity", request, response, [this, context, request, response](GrpcCommandTransaction& command) { return runUnaryGuarded( @@ -1004,7 +1004,7 @@ grpc::Status gRPCMotorServiceImpl::emergencyStop( api::MotorCommandResponse* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.MotorService/emergencyStop", request, response, [this, context, request, response](GrpcCommandTransaction& command) { return runUnaryGuarded( @@ -1039,7 +1039,7 @@ grpc::Status gRPCMotorServiceImpl::setEnabled( api::MotorCommandResponse* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.MotorService/setEnabled", request, response, [this, context, request, response](GrpcCommandTransaction& command) { return runUnaryGuarded( @@ -1821,7 +1821,7 @@ grpc::Status gRPCMotorServiceImpl::streamCyclicPositionImpl( safety_open.authority_generation = generation; safety_open.deadline = request_context.deadline; GrpcStreamingSafetySession safety_session( - dmgr_.safetyCoordinator(), request_context, + dmgr_.safetyManager(), request_context, std::move(safety_open)); if (!safety_session.admitted()) { return safety_session.status(); @@ -1980,7 +1980,7 @@ grpc::Status gRPCMotorServiceImpl::streamCyclicVelocityImpl( safety_open.authority_generation = generation; safety_open.deadline = request_context.deadline; GrpcStreamingSafetySession safety_session( - dmgr_.safetyCoordinator(), request_context, + dmgr_.safetyManager(), request_context, std::move(safety_open)); if (!safety_session.admitted()) { return safety_session.status(); diff --git a/cmvr-es/service/grpc/src/grpc_recovery_audit.cpp b/cmvr-es/service/grpc/server/src/grpc_recovery_audit.cpp similarity index 98% rename from cmvr-es/service/grpc/src/grpc_recovery_audit.cpp rename to cmvr-es/service/grpc/server/src/grpc_recovery_audit.cpp index e3bd03f0..915b9188 100644 --- a/cmvr-es/service/grpc/src/grpc_recovery_audit.cpp +++ b/cmvr-es/service/grpc/server/src/grpc_recovery_audit.cpp @@ -1,4 +1,4 @@ -#include "service/grpc/include/grpc_recovery_audit.h" +#include "service/grpc/server/include/grpc_recovery_audit.h" #include #include diff --git a/cmvr-es/service/grpc/src/grpc_robot_arm_teleop_backend.cpp b/cmvr-es/service/grpc/server/src/grpc_robot_arm_teleop_backend.cpp similarity index 99% rename from cmvr-es/service/grpc/src/grpc_robot_arm_teleop_backend.cpp rename to cmvr-es/service/grpc/server/src/grpc_robot_arm_teleop_backend.cpp index d839718c..e8527717 100644 --- a/cmvr-es/service/grpc/src/grpc_robot_arm_teleop_backend.cpp +++ b/cmvr-es/service/grpc/server/src/grpc_robot_arm_teleop_backend.cpp @@ -1,4 +1,4 @@ -#include "service/grpc/include/grpc_robot_arm_teleop_backend.h" +#include "service/grpc/server/include/grpc_robot_arm_teleop_backend.h" #include #include diff --git a/cmvr-es/service/grpc/src/grpc_safety_participants.cpp b/cmvr-es/service/grpc/server/src/grpc_safety_participants.cpp similarity index 97% rename from cmvr-es/service/grpc/src/grpc_safety_participants.cpp rename to cmvr-es/service/grpc/server/src/grpc_safety_participants.cpp index e0f74fc7..a7e39b2e 100644 --- a/cmvr-es/service/grpc/src/grpc_safety_participants.cpp +++ b/cmvr-es/service/grpc/server/src/grpc_safety_participants.cpp @@ -1,4 +1,4 @@ -#include "service/grpc/include/grpc_safety_participants.h" +#include "service/grpc/server/include/grpc_safety_participants.h" #include #include @@ -12,16 +12,16 @@ #include #include -#include "manager/media_source_hub/include/device_media_source_adapter.h" -#include "manager/safety/include/safety_coordinator.h" +#include "manager/media_source_manager/include/device_media_source_adapter.h" +#include "manager/safety_manager/include/safety_manager.h" #include "manager/task_manager/include/task_manager.h" -#include "service/action/include/action_queue_executor.h" -#include "service/grpc/include/camera_operational_activity_registry.h" -#include "service/grpc/include/camera_ptz_activity_registry.h" -#include "service/grpc/include/media_activity_coordinator.h" -#include "service/grpc/include/motor_activity_coordinator.h" -#include "service/stop_all/include/stop_all_admission_gate.h" -#include "service/stop_all/include/stop_operation_dispatcher.h" +#include "service/grpc/action/include/action_queue_executor.h" +#include "service/grpc/server/include/camera_operational_activity_registry.h" +#include "service/grpc/server/include/camera_ptz_activity_registry.h" +#include "service/grpc/server/include/media_activity_coordinator.h" +#include "service/grpc/server/include/motor_activity_coordinator.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" +#include "service/grpc/stop_all/include/stop_operation_dispatcher.h" namespace cmvr::service { @@ -966,7 +966,7 @@ std::vector mediaSourceStopOperations() const auto merge = [&unique_ids](const std::vector& ids) { unique_ids.insert(ids.begin(), ids.end()); }; - merge(media::globalMediaSourceHub().trackedSourceIds()); + merge(media::globalMediaSourceManager().trackedSourceIds()); merge(globalCameraOperationalActivityRegistry().trackedDeviceIds()); std::vector operations; @@ -976,7 +976,7 @@ std::vector mediaSourceStopOperations() "media-source:" + id, [id] { std::vector failures; - bool stopped = media::globalMediaSourceHub() + bool stopped = media::globalMediaSourceManager() .stopSourcesForDevice(id, &failures); if (!globalCameraOperationalActivityRegistry() .stopActivitiesForDevice(id, &failures)) { @@ -996,11 +996,11 @@ struct SharedParticipants { }; std::mutex shared_participants_mutex; -std::unordered_map +std::unordered_map shared_participants; void acquireSharedParticipants( - safety::SafetyCoordinator& coordinator, + safety::SafetyManager& coordinator, const std::shared_ptr& dispatcher) { std::lock_guard lock(shared_participants_mutex); @@ -1057,7 +1057,7 @@ void acquireSharedParticipants( shared_participants.emplace(&coordinator, std::move(entry)); } -void releaseSharedParticipants(safety::SafetyCoordinator& coordinator) noexcept +void releaseSharedParticipants(safety::SafetyManager& coordinator) noexcept { try { std::lock_guard lock(shared_participants_mutex); @@ -1078,7 +1078,7 @@ void releaseSharedParticipants(safety::SafetyCoordinator& coordinator) noexcept } // namespace struct GrpcSafetyParticipantRegistration::Impl { - safety::SafetyCoordinator* coordinator{nullptr}; + safety::SafetyManager* coordinator{nullptr}; std::string action_participant_id; bool shared_acquired{false}; @@ -1112,7 +1112,7 @@ GrpcSafetyParticipantRegistration::operator=( std::unique_ptr registerGrpcSafetyParticipants( - safety::SafetyCoordinator& coordinator, + safety::SafetyManager& coordinator, std::shared_ptr action_queue, std::shared_ptr stop_dispatcher) { diff --git a/cmvr-es/service/grpc/src/grpc_safety_proto.cpp b/cmvr-es/service/grpc/server/src/grpc_safety_proto.cpp similarity index 99% rename from cmvr-es/service/grpc/src/grpc_safety_proto.cpp rename to cmvr-es/service/grpc/server/src/grpc_safety_proto.cpp index 4f270c4f..fc5347da 100644 --- a/cmvr-es/service/grpc/src/grpc_safety_proto.cpp +++ b/cmvr-es/service/grpc/server/src/grpc_safety_proto.cpp @@ -1,4 +1,4 @@ -#include "service/grpc/include/grpc_safety_proto.h" +#include "service/grpc/server/include/grpc_safety_proto.h" #include diff --git a/cmvr-es/service/grpc/src/grpc_security.cpp b/cmvr-es/service/grpc/server/src/grpc_security.cpp similarity index 99% rename from cmvr-es/service/grpc/src/grpc_security.cpp rename to cmvr-es/service/grpc/server/src/grpc_security.cpp index c802037a..78593af9 100644 --- a/cmvr-es/service/grpc/src/grpc_security.cpp +++ b/cmvr-es/service/grpc/server/src/grpc_security.cpp @@ -1,4 +1,4 @@ -#include "service/grpc/include/grpc_security.h" +#include "service/grpc/server/include/grpc_security.h" #include #include diff --git a/cmvr-es/service/grpc/src/grpc_speaker_service.cpp b/cmvr-es/service/grpc/server/src/grpc_speaker_service.cpp similarity index 97% rename from cmvr-es/service/grpc/src/grpc_speaker_service.cpp rename to cmvr-es/service/grpc/server/src/grpc_speaker_service.cpp index eb113ab4..f9704fda 100644 --- a/cmvr-es/service/grpc/src/grpc_speaker_service.cpp +++ b/cmvr-es/service/grpc/server/src/grpc_speaker_service.cpp @@ -1,7 +1,7 @@ #include "common/base/logging/logger.h" -#include "service/grpc/include/grpc_command_transaction.h" -#include "service/grpc/include/media_activity_coordinator.h" -#include "service/grpc/include/grpc_security.h" +#include "service/grpc/server/include/grpc_command_transaction.h" +#include "service/grpc/server/include/media_activity_coordinator.h" +#include "service/grpc/server/include/grpc_security.h" #include #include #include @@ -147,7 +147,7 @@ grpc::Status gRPCSpeakerServiceImpl::GetStatus(grpc::ServerContext* context, grpc::Status gRPCSpeakerServiceImpl::PlayAudio(grpc::ServerContext* context, const api::PlayAudioCommand_Request* request, api::PlayAudioCommand_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.SpeakerService/PlayAudio", request, response, [this, request, response](GrpcCommandTransaction& command) { auto media_session = globalMediaActivityCoordinator().beginSession(); @@ -240,7 +240,7 @@ grpc::Status gRPCSpeakerServiceImpl::StreamAudio(grpc::ServerContext* context, safety_open.deadline = cmvr_grpc_call_guard.context().deadline; safety_session.emplace( - dmgr_.safetyCoordinator(), + dmgr_.safetyManager(), cmvr_grpc_call_guard.context(), std::move(safety_open)); if (!safety_session->admitted()) { @@ -307,7 +307,7 @@ grpc::Status gRPCSpeakerServiceImpl::StreamAudio(grpc::ServerContext* context, grpc::Status gRPCSpeakerServiceImpl::StopPlayback(grpc::ServerContext* context, const api::StopSpeakerCommand_Request* request, api::StopSpeakerCommand_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.SpeakerService/StopPlayback", request, response, [this, request, response](GrpcCommandTransaction& command) { string dev_id = request->header().device_id(); @@ -332,7 +332,7 @@ grpc::Status gRPCSpeakerServiceImpl::StopPlayback(grpc::ServerContext* context, grpc::Status gRPCSpeakerServiceImpl::PausePlayback(grpc::ServerContext* context, const api::PauseSpeakerCommand_Request* request, api::PauseSpeakerCommand_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.SpeakerService/PausePlayback", request, response, [this, request, response](GrpcCommandTransaction& command) { string dev_id = request->header().device_id(); @@ -355,7 +355,7 @@ grpc::Status gRPCSpeakerServiceImpl::PausePlayback(grpc::ServerContext* context, grpc::Status gRPCSpeakerServiceImpl::ResumePlayback(grpc::ServerContext* context, const api::ResumeSpeakerCommand_Request* request, api::ResumeSpeakerCommand_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.SpeakerService/ResumePlayback", request, response, [this, request, response](GrpcCommandTransaction& command) { auto media_session = globalMediaActivityCoordinator().beginSession(); @@ -396,7 +396,7 @@ grpc::Status gRPCSpeakerServiceImpl::ResumePlayback(grpc::ServerContext* context grpc::Status gRPCSpeakerServiceImpl::SetVolume(grpc::ServerContext* context, const api::SetSpeakerVolumeCommand_Request* request, api::SetSpeakerVolumeCommand_Feedback* response) { return executeRegisteredGrpcCommand( - security_gateway_, context, dmgr_.safetyCoordinator(), + security_gateway_, context, dmgr_.safetyManager(), "/cmvr.api.SpeakerService/SetVolume", request, response, [this, request, response](GrpcCommandTransaction& command) { string dev_id = request->header().device_id(); diff --git a/cmvr-es/service/grpc/src/grpc_system_service.cpp b/cmvr-es/service/grpc/server/src/grpc_system_service.cpp similarity index 97% rename from cmvr-es/service/grpc/src/grpc_system_service.cpp rename to cmvr-es/service/grpc/server/src/grpc_system_service.cpp index d3c57513..211d2f37 100644 --- a/cmvr-es/service/grpc/src/grpc_system_service.cpp +++ b/cmvr-es/service/grpc/server/src/grpc_system_service.cpp @@ -27,20 +27,20 @@ #include "devices/gripper/abstract_gripper.h" #include "devices/microphone/abstract_microphone.h" #include "devices/speaker/abstract_speaker.h" -#include "manager/control_authority/include/control_authority_manager.h" -#include "manager/media_source_hub/include/device_media_source_adapter.h" +#include "manager/control_authority_manager/include/control_authority_manager.h" +#include "manager/media_source_manager/include/device_media_source_adapter.h" #include "manager/task_manager/include/task_manager.h" -#include "service/action/include/action_queue_executor.h" -#include "service/grpc/include/camera_operational_activity_registry.h" -#include "service/grpc/include/camera_ptz_activity_registry.h" -#include "service/grpc/include/grpc_recovery_audit.h" -#include "service/grpc/include/grpc_safety_proto.h" -#include "service/grpc/include/grpc_safety_participants.h" -#include "service/grpc/include/grpc_security.h" -#include "service/grpc/include/media_activity_coordinator.h" -#include "service/grpc/include/motor_activity_coordinator.h" -#include "service/stop_all/include/stop_all_admission_gate.h" -#include "service/stop_all/include/stop_operation_dispatcher.h" +#include "service/grpc/action/include/action_queue_executor.h" +#include "service/grpc/server/include/camera_operational_activity_registry.h" +#include "service/grpc/server/include/camera_ptz_activity_registry.h" +#include "service/grpc/server/include/grpc_recovery_audit.h" +#include "service/grpc/server/include/grpc_safety_proto.h" +#include "service/grpc/server/include/grpc_safety_participants.h" +#include "service/grpc/server/include/grpc_security.h" +#include "service/grpc/server/include/media_activity_coordinator.h" +#include "service/grpc/server/include/motor_activity_coordinator.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" +#include "service/grpc/stop_all/include/stop_operation_dispatcher.h" using namespace cmvr::device; using namespace cmvr::service; @@ -718,7 +718,7 @@ StopOutcome stopCameraActivities( const std::shared_ptr& camera) { std::vector failures; - bool stopped = cmvr::media::globalMediaSourceHub() + bool stopped = cmvr::media::globalMediaSourceManager() .stopSourcesForDevice(device_id, &failures); if (!globalCameraPtzActivityRegistry().stopActivitiesForDevice( device_id, &failures)) { @@ -767,7 +767,7 @@ StopOutcome stopMicrophone( const std::shared_ptr& microphone) { std::vector failures; - bool stopped = cmvr::media::globalMediaSourceHub() + bool stopped = cmvr::media::globalMediaSourceManager() .stopSourcesForDevice(device_id, &failures); try { cmvr::device::MicrophoneState state{}; @@ -811,7 +811,7 @@ StopOutcome stopSpeaker( StopOutcome stopTrackedMediaActivities(const std::string& device_id) { std::vector failures; - bool stopped = cmvr::media::globalMediaSourceHub() + bool stopped = cmvr::media::globalMediaSourceManager() .stopSourcesForDevice(device_id, &failures); if (!globalCameraPtzActivityRegistry().stopActivitiesForDevice( device_id, &failures)) { @@ -1162,7 +1162,7 @@ gRPCSystemServiceImpl::gRPCSystemServiceImpl( acquireProcessStopDispatcher(stop_dispatcher_); try { safety_participant_registration_ = registerGrpcSafetyParticipants( - dmgr_.safetyCoordinator(), action_queue_, stop_dispatcher_); + dmgr_.safetyManager(), action_queue_, stop_dispatcher_); } catch (...) { releaseProcessStopDispatcher(stop_dispatcher_); throw; @@ -1217,7 +1217,7 @@ grpc::Status gRPCSystemServiceImpl::GetSystemInfo(grpc::ServerContext* context, toString(security.recovery_exposure)); response->set_grpc_insecure_non_loopback( security.insecure_non_loopback); - const auto safety = dmgr_.safetyCoordinator().snapshot(); + const auto safety = dmgr_.safetyManager().snapshot(); response->set_control_service_instance_id( safety.service_instance_id); response->set_safety_enforcement_mode( @@ -1365,7 +1365,7 @@ grpc::Status gRPCSystemServiceImpl::GetSafetyState( return grpc::Status(grpc::StatusCode::INVALID_ARGUMENT, scope.error); } - const auto snapshot = dmgr_.safetyCoordinator().snapshot(); + const auto snapshot = dmgr_.safetyManager().snapshot(); response->set_system_state( toApiSystemAdmissionState(snapshot.system_state)); response->set_safety_epoch(snapshot.safety_epoch); @@ -1486,7 +1486,7 @@ grpc::Status gRPCSystemServiceImpl::RecoverSafetyState( auto deadline = cmvr_grpc_call_guard.context().deadline; const auto configured_deadline = cmvr::safety::SafetyClock::now() + - dmgr_.safetyCoordinator().config().recovery_timeout; + dmgr_.safetyManager().config().recovery_timeout; if (deadline == cmvr::safety::SafetyClock::time_point::max() || configured_deadline < deadline) { deadline = configured_deadline; @@ -1528,7 +1528,7 @@ grpc::Status gRPCSystemServiceImpl::RecoverSafetyState( } const auto result = - dmgr_.safetyCoordinator().recover(coordinator_request); + dmgr_.safetyManager().recover(coordinator_request); response->set_recovery_id(result.recovery_id); response->set_result(toApiRecoveryResult(result.result)); response->set_previous_safety_epoch(result.previous_safety_epoch); @@ -1544,7 +1544,7 @@ grpc::Status gRPCSystemServiceImpl::RecoverSafetyState( header->set_success(success); header->set_command_id(request->recovery_id()); header->set_service_instance_id( - dmgr_.safetyCoordinator().serviceInstanceId()); + dmgr_.safetyManager().serviceInstanceId()); header->set_safety_epoch(result.current_safety_epoch); header->set_execution_state( success ? cmvr::api::COMMAND_EXECUTION_STATE_COMPLETED @@ -1596,7 +1596,7 @@ grpc::Status gRPCSystemServiceImpl::StopAll(grpc::ServerContext* context, grpc::StatusCode::INVALID_ARGUMENT, "StopAll request and response are required"); } - if (dmgr_.safetyCoordinator().config().enforcement_mode != + if (dmgr_.safetyManager().config().enforcement_mode != cmvr::safety::EnforcementMode::Legacy) { auto deadline = cmvr_grpc_call_guard.context().deadline; const auto configured_deadline = @@ -1616,7 +1616,7 @@ grpc::Status gRPCSystemServiceImpl::StopAll(grpc::ServerContext* context, if (operation_id.empty() && request->has_header()) { operation_id = request->header().command_id(); } - const auto result = dmgr_.safetyCoordinator().stopAll( + const auto result = dmgr_.safetyManager().stopAll( std::move(operation_id), deadline); response->set_operation_id(result.operation_id); response->set_previous_safety_epoch( @@ -1633,7 +1633,7 @@ grpc::Status gRPCSystemServiceImpl::StopAll(grpc::ServerContext* context, header->set_success(result.success); header->set_command_id(result.operation_id); header->set_service_instance_id( - dmgr_.safetyCoordinator().serviceInstanceId()); + dmgr_.safetyManager().serviceInstanceId()); header->set_safety_epoch(result.current_safety_epoch); header->set_execution_state( result.success @@ -1826,7 +1826,7 @@ grpc::Status gRPCSystemServiceImpl::StopAll(grpc::ServerContext* context, tracked_media_ids.insert(ids.begin(), ids.end()); }; merge_tracked_ids( - cmvr::media::globalMediaSourceHub().trackedSourceIds()); + cmvr::media::globalMediaSourceManager().trackedSourceIds()); merge_tracked_ids( globalCameraPtzActivityRegistry().trackedDeviceIds()); merge_tracked_ids( diff --git a/cmvr-es/service/grpc/src/media_activity_coordinator.cpp b/cmvr-es/service/grpc/server/src/media_activity_coordinator.cpp similarity index 99% rename from cmvr-es/service/grpc/src/media_activity_coordinator.cpp rename to cmvr-es/service/grpc/server/src/media_activity_coordinator.cpp index 8bd99123..2af439ea 100644 --- a/cmvr-es/service/grpc/src/media_activity_coordinator.cpp +++ b/cmvr-es/service/grpc/server/src/media_activity_coordinator.cpp @@ -1,7 +1,7 @@ -#include "service/grpc/include/media_activity_coordinator.h" +#include "service/grpc/server/include/media_activity_coordinator.h" #include "common/base/logging/logger.h" -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" #include #include diff --git a/cmvr-es/service/grpc/src/motor_activity_coordinator.cpp b/cmvr-es/service/grpc/server/src/motor_activity_coordinator.cpp similarity index 99% rename from cmvr-es/service/grpc/src/motor_activity_coordinator.cpp rename to cmvr-es/service/grpc/server/src/motor_activity_coordinator.cpp index aef287ae..9bab0d38 100644 --- a/cmvr-es/service/grpc/src/motor_activity_coordinator.cpp +++ b/cmvr-es/service/grpc/server/src/motor_activity_coordinator.cpp @@ -1,4 +1,4 @@ -#include "service/grpc/include/motor_activity_coordinator.h" +#include "service/grpc/server/include/motor_activity_coordinator.h" #include #include diff --git a/cmvr-es/service/grpc/tests/camera_operational_activity_registry_test.cpp b/cmvr-es/service/grpc/server/tests/camera_operational_activity_registry_test.cpp similarity index 99% rename from cmvr-es/service/grpc/tests/camera_operational_activity_registry_test.cpp rename to cmvr-es/service/grpc/server/tests/camera_operational_activity_registry_test.cpp index 79b52385..973fdd9e 100644 --- a/cmvr-es/service/grpc/tests/camera_operational_activity_registry_test.cpp +++ b/cmvr-es/service/grpc/server/tests/camera_operational_activity_registry_test.cpp @@ -1,4 +1,4 @@ -#include "service/grpc/include/camera_operational_activity_registry.h" +#include "service/grpc/server/include/camera_operational_activity_registry.h" #include #include @@ -11,7 +11,7 @@ #include -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" namespace cmvr::service { namespace { diff --git a/cmvr-es/service/grpc/tests/camera_ptz_activity_registry_test.cpp b/cmvr-es/service/grpc/server/tests/camera_ptz_activity_registry_test.cpp similarity index 98% rename from cmvr-es/service/grpc/tests/camera_ptz_activity_registry_test.cpp rename to cmvr-es/service/grpc/server/tests/camera_ptz_activity_registry_test.cpp index 272e3ecf..eec9ebe2 100644 --- a/cmvr-es/service/grpc/tests/camera_ptz_activity_registry_test.cpp +++ b/cmvr-es/service/grpc/server/tests/camera_ptz_activity_registry_test.cpp @@ -1,4 +1,4 @@ -#include "service/grpc/include/camera_ptz_activity_registry.h" +#include "service/grpc/server/include/camera_ptz_activity_registry.h" #include #include @@ -10,7 +10,7 @@ #include -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" namespace cmvr::service { namespace { diff --git a/cmvr-es/service/grpc/tests/grpc_agv_service_test.cpp b/cmvr-es/service/grpc/server/tests/grpc_agv_service_test.cpp similarity index 99% rename from cmvr-es/service/grpc/tests/grpc_agv_service_test.cpp rename to cmvr-es/service/grpc/server/tests/grpc_agv_service_test.cpp index 68f76da0..a59e2e13 100644 --- a/cmvr-es/service/grpc/tests/grpc_agv_service_test.cpp +++ b/cmvr-es/service/grpc/server/tests/grpc_agv_service_test.cpp @@ -1,4 +1,4 @@ -#include "service/grpc/include/grpc_agv_service.h" +#include "service/grpc/server/include/grpc_agv_service.h" #include #include @@ -11,9 +11,9 @@ #include #include "cmvr/config/device_manager_config/device_manager_config.pb.h" -#include "manager/control_authority/include/control_authority_manager.h" +#include "manager/control_authority_manager/include/control_authority_manager.h" #include "manager/device_manager/include/device_manager.h" -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" namespace cmvr::service { namespace { diff --git a/cmvr-es/service/grpc/src/grpc_arm_client_test.cpp b/cmvr-es/service/grpc/server/tests/grpc_arm_client_test.cpp similarity index 100% rename from cmvr-es/service/grpc/src/grpc_arm_client_test.cpp rename to cmvr-es/service/grpc/server/tests/grpc_arm_client_test.cpp diff --git a/cmvr-es/service/grpc/tests/grpc_arm_service_test.cpp b/cmvr-es/service/grpc/server/tests/grpc_arm_service_test.cpp similarity index 99% rename from cmvr-es/service/grpc/tests/grpc_arm_service_test.cpp rename to cmvr-es/service/grpc/server/tests/grpc_arm_service_test.cpp index 3c923938..980d5b7f 100644 --- a/cmvr-es/service/grpc/tests/grpc_arm_service_test.cpp +++ b/cmvr-es/service/grpc/server/tests/grpc_arm_service_test.cpp @@ -1,4 +1,4 @@ -#include "service/grpc/include/grpc_arm_service.h" +#include "service/grpc/server/include/grpc_arm_service.h" #include #include @@ -20,10 +20,10 @@ #include #include "cmvr/config/device_manager_config/device_manager_config.pb.h" -#include "manager/control_authority/include/control_authority_manager.h" +#include "manager/control_authority_manager/include/control_authority_manager.h" #include "manager/device_manager/include/device_manager.h" -#include "service/grpc/include/grpc_error_logging_interceptor.h" -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "service/grpc/server/include/grpc_error_logging_interceptor.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" namespace cmvr::service { namespace { @@ -599,7 +599,7 @@ protected: header->set_command_id(command_id); header->set_expected_service_instance_id( device::DeviceManager::getInstance() - .safetyCoordinator() + .safetyManager() .serviceInstanceId()); header->set_valid_for_ms(1000); request.mutable_target()->add_position(position); diff --git a/cmvr-es/service/grpc/tests/grpc_arm_teleop_service_test.cpp b/cmvr-es/service/grpc/server/tests/grpc_arm_teleop_service_test.cpp similarity index 98% rename from cmvr-es/service/grpc/tests/grpc_arm_teleop_service_test.cpp rename to cmvr-es/service/grpc/server/tests/grpc_arm_teleop_service_test.cpp index a8394d5a..0a6be187 100644 --- a/cmvr-es/service/grpc/tests/grpc_arm_teleop_service_test.cpp +++ b/cmvr-es/service/grpc/server/tests/grpc_arm_teleop_service_test.cpp @@ -1,4 +1,4 @@ -#include "service/grpc/include/grpc_arm_teleop_service.h" +#include "service/grpc/server/include/grpc_arm_teleop_service.h" #include #include @@ -17,9 +17,9 @@ #include #include -#include "manager/safety/include/device_safety_endpoint.h" -#include "manager/safety/include/safety_coordinator.h" -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "manager/safety_manager/include/device_safety_endpoint.h" +#include "manager/safety_manager/include/safety_manager.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" namespace cmvr::service { namespace { @@ -338,10 +338,10 @@ class TeleopServerHarness final { public: explicit TeleopServerHarness( std::shared_ptr backend, - safety::SafetyCoordinator* safety_coordinator = nullptr) + safety::SafetyManager* safety_manager = nullptr) : service_( std::move(backend), nullptr, nullptr, - safety_coordinator) + safety_manager) { socket_path_ = "/tmp/cmvr_arm_teleop_service_test_" + @@ -862,9 +862,9 @@ TEST(ArmTeleopServiceTest, TEST(ArmTeleopServiceTest, CoordinatorInvalidationStopsExistingSessionBeforeAnotherSetpoint) { - safety::SafetyCoordinatorConfig config; + safety::SafetyManagerConfig config; config.enforcement_mode = safety::EnforcementMode::EnforceAll; - safety::SafetyCoordinator coordinator(config); + safety::SafetyManager coordinator(config); auto endpoint = std::make_shared(); ASSERT_TRUE(coordinator.registerDevice( {endpoint->descriptor(), endpoint, {}})); diff --git a/cmvr-es/service/grpc/tests/grpc_camera_stream_policy_test.cpp b/cmvr-es/service/grpc/server/tests/grpc_camera_stream_policy_test.cpp similarity index 96% rename from cmvr-es/service/grpc/tests/grpc_camera_stream_policy_test.cpp rename to cmvr-es/service/grpc/server/tests/grpc_camera_stream_policy_test.cpp index 1d84b942..ad450c4c 100644 --- a/cmvr-es/service/grpc/tests/grpc_camera_stream_policy_test.cpp +++ b/cmvr-es/service/grpc/server/tests/grpc_camera_stream_policy_test.cpp @@ -1,4 +1,4 @@ -#include "service/grpc/include/grpc_camera_stream_policy.h" +#include "service/grpc/server/include/grpc_camera_stream_policy.h" #include #include diff --git a/cmvr-es/service/grpc/tests/grpc_command_transaction_test.cpp b/cmvr-es/service/grpc/server/tests/grpc_command_transaction_test.cpp similarity index 95% rename from cmvr-es/service/grpc/tests/grpc_command_transaction_test.cpp rename to cmvr-es/service/grpc/server/tests/grpc_command_transaction_test.cpp index c50d7178..3ded4775 100644 --- a/cmvr-es/service/grpc/tests/grpc_command_transaction_test.cpp +++ b/cmvr-es/service/grpc/server/tests/grpc_command_transaction_test.cpp @@ -1,4 +1,4 @@ -#include "service/grpc/include/grpc_command_transaction.h" +#include "service/grpc/server/include/grpc_command_transaction.h" #include #include @@ -9,7 +9,7 @@ #include #include "cmvr/api/arm_command.pb.h" -#include "manager/safety/include/device_safety_endpoint.h" +#include "manager/safety_manager/include/device_safety_endpoint.h" namespace cmvr::service { namespace { @@ -79,7 +79,7 @@ public: }; api::MoveJ_Request moveRequest( - const safety::SafetyCoordinator& coordinator, + const safety::SafetyManager& coordinator, const std::string& command_id, const double target = 0.25) { @@ -94,7 +94,7 @@ api::MoveJ_Request moveRequest( } grpc::Status executeMove( - safety::SafetyCoordinator& coordinator, + safety::SafetyManager& coordinator, const api::MoveJ_Request& request, api::MoveJ_Response& response, int& dispatches, @@ -124,7 +124,7 @@ grpc::Status executeMove( TEST(GrpcCommandTransactionTest, DeterministicHashIgnoresRetryIdentityButIncludesPayload) { - safety::SafetyCoordinator coordinator; + safety::SafetyManager coordinator; auto first = moveRequest(coordinator, "command-1", 0.25); auto retry = first; retry.mutable_header()->set_command_id("command-2"); @@ -152,7 +152,7 @@ TEST(GrpcCommandTransactionTest, TEST(GrpcCommandTransactionTest, SameIdReturnsCachedResponseWithoutRedispatch) { - safety::SafetyCoordinator coordinator; + safety::SafetyManager coordinator; auto endpoint = std::make_shared("arm"); ASSERT_TRUE(coordinator.registerDevice( {endpoint->descriptor(), endpoint, {}})); @@ -194,9 +194,9 @@ TEST(GrpcCommandTransactionTest, SameIdReturnsCachedResponseWithoutRedispatch) TEST(GrpcCommandTransactionTest, EnforcedCommandRequiresIdentityAndRunsFinalHardwareCheck) { - safety::SafetyCoordinatorConfig config; + safety::SafetyManagerConfig config; config.enforcement_mode = safety::EnforcementMode::EnforceAll; - safety::SafetyCoordinator coordinator(config); + safety::SafetyManager coordinator(config); auto endpoint = std::make_shared("arm"); ASSERT_TRUE(coordinator.registerDevice( {endpoint->descriptor(), endpoint, {}})); @@ -231,9 +231,9 @@ TEST(GrpcCommandTransactionTest, TEST(GrpcCommandTransactionTest, ExceptionAfterDispatchIsQuarantinedAndNeverRedispatched) { - safety::SafetyCoordinatorConfig config; + safety::SafetyManagerConfig config; config.enforcement_mode = safety::EnforcementMode::EnforceAll; - safety::SafetyCoordinator coordinator(config); + safety::SafetyManager coordinator(config); auto endpoint = std::make_shared("arm"); ASSERT_TRUE(coordinator.registerDevice( {endpoint->descriptor(), endpoint, {}})); @@ -269,9 +269,9 @@ TEST(GrpcCommandTransactionTest, TEST(GrpcCommandTransactionTest, ScopedDispatchChecksHardwareForEverySubmission) { - safety::SafetyCoordinatorConfig config; + safety::SafetyManagerConfig config; config.enforcement_mode = safety::EnforcementMode::EnforceAll; - safety::SafetyCoordinator coordinator(config); + safety::SafetyManager coordinator(config); auto endpoint = std::make_shared("arm"); ASSERT_TRUE(coordinator.registerDevice( {endpoint->descriptor(), endpoint, {}})); @@ -313,9 +313,9 @@ TEST(GrpcCommandTransactionTest, TEST(GrpcCommandTransactionTest, RevokedActuationPermitCannotSuppressInternalSafetyStop) { - safety::SafetyCoordinatorConfig config; + safety::SafetyManagerConfig config; config.enforcement_mode = safety::EnforcementMode::EnforceAll; - safety::SafetyCoordinator coordinator(config); + safety::SafetyManager coordinator(config); auto endpoint = std::make_shared("arm"); ASSERT_TRUE(coordinator.registerDevice( {endpoint->descriptor(), endpoint, {}})); @@ -374,9 +374,9 @@ TEST(GrpcCommandTransactionTest, TEST(GrpcCommandTransactionTest, ServerDerivedStopRemainsDispatchableWhenActuationIsQuarantined) { - safety::SafetyCoordinatorConfig config; + safety::SafetyManagerConfig config; config.enforcement_mode = safety::EnforcementMode::EnforceAll; - safety::SafetyCoordinator coordinator(config); + safety::SafetyManager coordinator(config); auto endpoint = std::make_shared("arm"); ASSERT_TRUE(coordinator.registerDevice( {endpoint->descriptor(), endpoint, {}})); diff --git a/cmvr-es/service/grpc/tests/grpc_dexhand_service_test.cpp b/cmvr-es/service/grpc/server/tests/grpc_dexhand_service_test.cpp similarity index 97% rename from cmvr-es/service/grpc/tests/grpc_dexhand_service_test.cpp rename to cmvr-es/service/grpc/server/tests/grpc_dexhand_service_test.cpp index 6ebdb2a6..6638b27e 100644 --- a/cmvr-es/service/grpc/tests/grpc_dexhand_service_test.cpp +++ b/cmvr-es/service/grpc/server/tests/grpc_dexhand_service_test.cpp @@ -1,4 +1,4 @@ -#include "service/grpc/include/grpc_dexhand_service.h" +#include "service/grpc/server/include/grpc_dexhand_service.h" #include #include @@ -18,10 +18,10 @@ #include #include "cmvr/config/device_manager_config/device_manager_config.pb.h" -#include "manager/control_authority/include/control_authority_manager.h" +#include "manager/control_authority_manager/include/control_authority_manager.h" #include "manager/device_manager/include/device_manager.h" -#include "service/grpc/include/media_activity_coordinator.h" -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "service/grpc/server/include/media_activity_coordinator.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" namespace cmvr::service { namespace { diff --git a/cmvr-es/service/grpc/tests/grpc_error_logging_interceptor_test.cpp b/cmvr-es/service/grpc/server/tests/grpc_error_logging_interceptor_test.cpp similarity index 99% rename from cmvr-es/service/grpc/tests/grpc_error_logging_interceptor_test.cpp rename to cmvr-es/service/grpc/server/tests/grpc_error_logging_interceptor_test.cpp index 02b7adca..2287e2d2 100644 --- a/cmvr-es/service/grpc/tests/grpc_error_logging_interceptor_test.cpp +++ b/cmvr-es/service/grpc/server/tests/grpc_error_logging_interceptor_test.cpp @@ -1,4 +1,4 @@ -#include "service/grpc/include/grpc_error_logging_interceptor.h" +#include "service/grpc/server/include/grpc_error_logging_interceptor.h" #include #include diff --git a/cmvr-es/service/grpc/tests/grpc_head_service_test.cpp b/cmvr-es/service/grpc/server/tests/grpc_head_service_test.cpp similarity index 98% rename from cmvr-es/service/grpc/tests/grpc_head_service_test.cpp rename to cmvr-es/service/grpc/server/tests/grpc_head_service_test.cpp index 762dbcc7..0bef7581 100644 --- a/cmvr-es/service/grpc/tests/grpc_head_service_test.cpp +++ b/cmvr-es/service/grpc/server/tests/grpc_head_service_test.cpp @@ -1,4 +1,4 @@ -#include "service/grpc/include/grpc_head_service.h" +#include "service/grpc/server/include/grpc_head_service.h" #include #include @@ -11,8 +11,8 @@ #include "cmvr/config/device_manager_config/device_manager_config.pb.h" #include "manager/device_manager/include/device_manager.h" -#include "service/grpc/include/media_activity_coordinator.h" -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "service/grpc/server/include/media_activity_coordinator.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" namespace cmvr::service { namespace { diff --git a/cmvr-es/service/grpc/src/grpc_hlc_client_test.cpp b/cmvr-es/service/grpc/server/tests/grpc_hlc_client_test.cpp similarity index 100% rename from cmvr-es/service/grpc/src/grpc_hlc_client_test.cpp rename to cmvr-es/service/grpc/server/tests/grpc_hlc_client_test.cpp diff --git a/cmvr-es/service/grpc/tests/grpc_motor_service_test.cpp b/cmvr-es/service/grpc/server/tests/grpc_motor_service_test.cpp similarity index 99% rename from cmvr-es/service/grpc/tests/grpc_motor_service_test.cpp rename to cmvr-es/service/grpc/server/tests/grpc_motor_service_test.cpp index da8898fa..ea369cb8 100644 --- a/cmvr-es/service/grpc/tests/grpc_motor_service_test.cpp +++ b/cmvr-es/service/grpc/server/tests/grpc_motor_service_test.cpp @@ -1,4 +1,4 @@ -#include "service/grpc/include/grpc_motor_service.h" +#include "service/grpc/server/include/grpc_motor_service.h" #include #include @@ -18,8 +18,8 @@ #include "devices/motor/manager/include/motor_manager.h" #include "devices/motor/motor_protocol_interface.h" #include "manager/device_manager/include/device_manager.h" -#include "service/grpc/include/motor_activity_coordinator.h" -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "service/grpc/server/include/motor_activity_coordinator.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" namespace cmvr::service { @@ -693,7 +693,7 @@ TEST_F(MotorServiceTest, std::string::npos); EXPECT_GE(protocol_->quick_stop_count_.load(), 1); const auto safety = device::DeviceManager::getInstance() - .safetyCoordinator() + .safetyManager() .snapshot(); ASSERT_EQ(safety.devices.size(), 1U); EXPECT_EQ( diff --git a/cmvr-es/service/grpc/tests/grpc_robot_arm_teleop_backend_test.cpp b/cmvr-es/service/grpc/server/tests/grpc_robot_arm_teleop_backend_test.cpp similarity index 99% rename from cmvr-es/service/grpc/tests/grpc_robot_arm_teleop_backend_test.cpp rename to cmvr-es/service/grpc/server/tests/grpc_robot_arm_teleop_backend_test.cpp index 7cc01f07..b320b3b4 100644 --- a/cmvr-es/service/grpc/tests/grpc_robot_arm_teleop_backend_test.cpp +++ b/cmvr-es/service/grpc/server/tests/grpc_robot_arm_teleop_backend_test.cpp @@ -1,4 +1,4 @@ -#include "service/grpc/include/grpc_robot_arm_teleop_backend.h" +#include "service/grpc/server/include/grpc_robot_arm_teleop_backend.h" #include #include diff --git a/cmvr-es/service/grpc/tests/grpc_security_test.cpp b/cmvr-es/service/grpc/server/tests/grpc_security_test.cpp similarity index 99% rename from cmvr-es/service/grpc/tests/grpc_security_test.cpp rename to cmvr-es/service/grpc/server/tests/grpc_security_test.cpp index 1a21dfe6..17b1e1f7 100644 --- a/cmvr-es/service/grpc/tests/grpc_security_test.cpp +++ b/cmvr-es/service/grpc/server/tests/grpc_security_test.cpp @@ -1,4 +1,4 @@ -#include "service/grpc/include/grpc_security.h" +#include "service/grpc/server/include/grpc_security.h" #include #include diff --git a/cmvr-es/service/grpc/tests/grpc_system_service_test.cpp b/cmvr-es/service/grpc/server/tests/grpc_system_service_test.cpp similarity index 98% rename from cmvr-es/service/grpc/tests/grpc_system_service_test.cpp rename to cmvr-es/service/grpc/server/tests/grpc_system_service_test.cpp index 7181aafd..3b3ba689 100644 --- a/cmvr-es/service/grpc/tests/grpc_system_service_test.cpp +++ b/cmvr-es/service/grpc/server/tests/grpc_system_service_test.cpp @@ -1,4 +1,4 @@ -#include "service/grpc/include/grpc_system_service.h" +#include "service/grpc/server/include/grpc_system_service.h" #include #include @@ -26,19 +26,19 @@ #include "devices/camera/abstract_camera.h" #include "devices/microphone/abstract_microphone.h" #include "devices/speaker/abstract_speaker.h" -#include "manager/control_authority/include/control_authority_manager.h" +#include "manager/control_authority_manager/include/control_authority_manager.h" #include "manager/device_manager/include/device_manager.h" -#include "manager/media_source_hub/include/device_media_source_adapter.h" +#include "manager/media_source_manager/include/device_media_source_adapter.h" #include "manager/task_manager/include/task_manager.h" -#include "service/action/include/action_queue_executor.h" -#include "service/grpc/include/camera_operational_activity_registry.h" -#include "service/grpc/include/camera_ptz_activity_registry.h" -#include "service/grpc/include/grpc_camera_service.h" -#include "service/grpc/include/grpc_recovery_audit.h" -#include "service/grpc/include/grpc_security.h" -#include "service/grpc/include/media_activity_coordinator.h" -#include "service/grpc/include/motor_activity_coordinator.h" -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "service/grpc/action/include/action_queue_executor.h" +#include "service/grpc/server/include/camera_operational_activity_registry.h" +#include "service/grpc/server/include/camera_ptz_activity_registry.h" +#include "service/grpc/server/include/grpc_camera_service.h" +#include "service/grpc/server/include/grpc_recovery_audit.h" +#include "service/grpc/server/include/grpc_security.h" +#include "service/grpc/server/include/media_activity_coordinator.h" +#include "service/grpc/server/include/motor_activity_coordinator.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" #include "task/task_factory.h" namespace cmvr::service { @@ -1348,7 +1348,7 @@ protected: { task::TaskManager::destroyInstance(); blocking_stop_task.reset(); - (void)media::globalMediaSourceHub().stopAllSources(); + (void)media::globalMediaSourceManager().stopAllSources(); control::ControlAuthorityManager::instance().clear(); globalStopAllAdmissionGate().clearForTesting(); globalCameraOperationalActivityRegistry().clearForTesting(); @@ -1377,7 +1377,7 @@ protected: globalCameraPtzActivityRegistry().clearForTesting(); globalMediaActivityCoordinator().clearForTesting(); globalMotorActivityCoordinator().clearForTesting(); - (void)media::globalMediaSourceHub().stopAllSources(); + (void)media::globalMediaSourceManager().stopAllSources(); } api::GetDeviceListCommand_Feedback getDeviceList() @@ -1623,7 +1623,7 @@ TEST_F(GrpcSystemServiceTest, RecoveryIsDisabledByDefault) request.set_recovery_id("recovery-disabled"); request.mutable_scope()->set_all_devices(true); request.set_expected_safety_epoch( - manager.safetyCoordinator().snapshot().safety_epoch); + manager.safetyManager().snapshot().safety_epoch); request.set_mode(api::RecoverSafetyStateCommand::VERIFY_ONLY); request.set_reason("diagnostic verification"); api::RecoverSafetyStateCommand_Feedback response; @@ -1649,7 +1649,7 @@ TEST_F(GrpcSystemServiceTest, RecoveryRequiresDurableAuditBeforeCoordinator) request.set_recovery_id("recovery-audited"); request.mutable_scope()->set_all_devices(true); request.set_expected_safety_epoch( - manager.safetyCoordinator().snapshot().safety_epoch); + manager.safetyManager().snapshot().safety_epoch); request.set_mode(api::RecoverSafetyStateCommand::VERIFY_ONLY); request.set_reason("verify the local work cell"); request.set_timeout_ms(500); @@ -1665,7 +1665,7 @@ TEST_F(GrpcSystemServiceTest, RecoveryRequiresDurableAuditBeforeCoordinator) EXPECT_EQ(response.recovery_id(), "recovery-audited"); const auto epoch_before_failure = - manager.safetyCoordinator().snapshot().safety_epoch; + manager.safetyManager().snapshot().safety_epoch; audit->fail = true; request.set_recovery_id("recovery-audit-fails"); request.set_expected_safety_epoch(epoch_before_failure); @@ -1678,7 +1678,7 @@ TEST_F(GrpcSystemServiceTest, RecoveryRequiresDurableAuditBeforeCoordinator) response.header().reason_code(), api::COMMAND_REASON_CODE_RECOVERY_AUDIT_FAILED); EXPECT_EQ( - manager.safetyCoordinator().snapshot().safety_epoch, + manager.safetyManager().snapshot().safety_epoch, epoch_before_failure); } @@ -1782,18 +1782,18 @@ TEST_F(GrpcSystemServiceTest, { config::DeviceManagerConfig config; config.mutable_safety()->set_mode( - config::SafetyCoordinatorConfig::ENFORCE_ALL); + config::SafetyManagerConfig::ENFORCE_ALL); auto& manager = device::DeviceManager::getInstance(config); action_trace_ = std::make_shared(); action_arm_ = std::make_shared( "action-arm", action_trace_); manager.registerDevice(action_arm_); - manager.safetyCoordinator().markStartupComplete(); + manager.safetyManager().markStartupComplete(); std::optional current_device_generation; const auto snapshot_deadline = std::chrono::steady_clock::now() + std::chrono::seconds(1); while (std::chrono::steady_clock::now() < snapshot_deadline) { - const auto safety = manager.safetyCoordinator().snapshot(); + const auto safety = manager.safetyManager().snapshot(); ASSERT_EQ( safety.system_state, safety::SystemAdmissionState::Open); const auto safety_device = std::find_if( @@ -3099,17 +3099,17 @@ TEST_F(GrpcSystemServiceTest, track_config.time_base = {1, 90000}; auto descriptor = media::makeTrackDescriptor(std::move(track_config)); auto hub_stop_calls = std::make_shared>(0); - media::MediaSourceHub::SourceCallbacks callbacks; + media::MediaSourceManager::SourceCallbacks callbacks; callbacks.start = []( - const media::MediaSourceHub::FrameSink&, - const media::MediaSourceHub::CancelPredicate&) { + const media::MediaSourceManager::FrameSink&, + const media::MediaSourceManager::CancelPredicate&) { return true; }; callbacks.stop_confirmed = [hub_stop_calls] { hub_stop_calls->fetch_add(1, std::memory_order_relaxed); return true; }; - auto& hub = media::globalMediaSourceHub(); + auto& hub = media::globalMediaSourceManager(); ASSERT_TRUE(hub.registerSource( descriptor, std::move(callbacks), 2)); auto subscription = hub.subscribe(hub_track_id); diff --git a/cmvr-es/service/grpc/tests/media_activity_coordinator_test.cpp b/cmvr-es/service/grpc/server/tests/media_activity_coordinator_test.cpp similarity index 99% rename from cmvr-es/service/grpc/tests/media_activity_coordinator_test.cpp rename to cmvr-es/service/grpc/server/tests/media_activity_coordinator_test.cpp index f93155f6..17ca7db1 100644 --- a/cmvr-es/service/grpc/tests/media_activity_coordinator_test.cpp +++ b/cmvr-es/service/grpc/server/tests/media_activity_coordinator_test.cpp @@ -1,4 +1,4 @@ -#include "service/grpc/include/media_activity_coordinator.h" +#include "service/grpc/server/include/media_activity_coordinator.h" #include #include diff --git a/cmvr-es/service/grpc/tests/motor_activity_coordinator_test.cpp b/cmvr-es/service/grpc/server/tests/motor_activity_coordinator_test.cpp similarity index 99% rename from cmvr-es/service/grpc/tests/motor_activity_coordinator_test.cpp rename to cmvr-es/service/grpc/server/tests/motor_activity_coordinator_test.cpp index 703f51b4..35d430f6 100644 --- a/cmvr-es/service/grpc/tests/motor_activity_coordinator_test.cpp +++ b/cmvr-es/service/grpc/server/tests/motor_activity_coordinator_test.cpp @@ -1,4 +1,4 @@ -#include "service/grpc/include/motor_activity_coordinator.h" +#include "service/grpc/server/include/motor_activity_coordinator.h" #include #include diff --git a/cmvr-es/service/stop_all/CMakeLists.txt b/cmvr-es/service/grpc/stop_all/CMakeLists.txt similarity index 83% rename from cmvr-es/service/stop_all/CMakeLists.txt rename to cmvr-es/service/grpc/stop_all/CMakeLists.txt index a50b9cc7..d6469ad3 100644 --- a/cmvr-es/service/stop_all/CMakeLists.txt +++ b/cmvr-es/service/grpc/stop_all/CMakeLists.txt @@ -5,19 +5,19 @@ add_library(stop_all_admission_gate STATIC target_compile_features(stop_all_admission_gate PUBLIC cxx_std_17) target_include_directories(stop_all_admission_gate PUBLIC - ${CMAKE_CURRENT_SOURCE_DIR}/../.. + ${CMAKE_CURRENT_SOURCE_DIR}/../../.. ) add_library(cmvr_es::stop_all_admission_gate ALIAS stop_all_admission_gate) add_library(camera_operational_activity_registry STATIC - ../grpc/src/camera_operational_activity_registry.cpp + ../server/src/camera_operational_activity_registry.cpp ) target_compile_features(camera_operational_activity_registry PUBLIC cxx_std_17) target_include_directories(camera_operational_activity_registry PUBLIC - ${CMAKE_CURRENT_SOURCE_DIR}/../.. + ${CMAKE_CURRENT_SOURCE_DIR}/../../.. ) target_link_libraries(camera_operational_activity_registry PUBLIC diff --git a/cmvr-es/service/stop_all/include/deferred_stop_operation.h b/cmvr-es/service/grpc/stop_all/include/deferred_stop_operation.h similarity index 100% rename from cmvr-es/service/stop_all/include/deferred_stop_operation.h rename to cmvr-es/service/grpc/stop_all/include/deferred_stop_operation.h diff --git a/cmvr-es/service/stop_all/include/stop_all_admission_gate.h b/cmvr-es/service/grpc/stop_all/include/stop_all_admission_gate.h similarity index 100% rename from cmvr-es/service/stop_all/include/stop_all_admission_gate.h rename to cmvr-es/service/grpc/stop_all/include/stop_all_admission_gate.h diff --git a/cmvr-es/service/stop_all/include/stop_operation_dispatcher.h b/cmvr-es/service/grpc/stop_all/include/stop_operation_dispatcher.h similarity index 100% rename from cmvr-es/service/stop_all/include/stop_operation_dispatcher.h rename to cmvr-es/service/grpc/stop_all/include/stop_operation_dispatcher.h diff --git a/cmvr-es/service/stop_all/src/stop_all_admission_gate.cpp b/cmvr-es/service/grpc/stop_all/src/stop_all_admission_gate.cpp similarity index 97% rename from cmvr-es/service/stop_all/src/stop_all_admission_gate.cpp rename to cmvr-es/service/grpc/stop_all/src/stop_all_admission_gate.cpp index 8920a732..cdee9a90 100644 --- a/cmvr-es/service/stop_all/src/stop_all_admission_gate.cpp +++ b/cmvr-es/service/grpc/stop_all/src/stop_all_admission_gate.cpp @@ -1,4 +1,4 @@ -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" #include diff --git a/cmvr-es/service/stop_all/src/stop_operation_dispatcher.cpp b/cmvr-es/service/grpc/stop_all/src/stop_operation_dispatcher.cpp similarity index 98% rename from cmvr-es/service/stop_all/src/stop_operation_dispatcher.cpp rename to cmvr-es/service/grpc/stop_all/src/stop_operation_dispatcher.cpp index f53b68c2..38bfb0cf 100644 --- a/cmvr-es/service/stop_all/src/stop_operation_dispatcher.cpp +++ b/cmvr-es/service/grpc/stop_all/src/stop_operation_dispatcher.cpp @@ -1,4 +1,4 @@ -#include "service/stop_all/include/stop_operation_dispatcher.h" +#include "service/grpc/stop_all/include/stop_operation_dispatcher.h" #include #include diff --git a/cmvr-es/service/stop_all/tests/stop_all_admission_gate_test.cpp b/cmvr-es/service/grpc/stop_all/tests/stop_all_admission_gate_test.cpp similarity index 97% rename from cmvr-es/service/stop_all/tests/stop_all_admission_gate_test.cpp rename to cmvr-es/service/grpc/stop_all/tests/stop_all_admission_gate_test.cpp index 14300844..21990915 100644 --- a/cmvr-es/service/stop_all/tests/stop_all_admission_gate_test.cpp +++ b/cmvr-es/service/grpc/stop_all/tests/stop_all_admission_gate_test.cpp @@ -1,4 +1,4 @@ -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" #include diff --git a/cmvr-es/service/stop_all/tests/stop_operation_dispatcher_test.cpp b/cmvr-es/service/grpc/stop_all/tests/stop_operation_dispatcher_test.cpp similarity index 99% rename from cmvr-es/service/stop_all/tests/stop_operation_dispatcher_test.cpp rename to cmvr-es/service/grpc/stop_all/tests/stop_operation_dispatcher_test.cpp index aabb337b..562cd05b 100644 --- a/cmvr-es/service/stop_all/tests/stop_operation_dispatcher_test.cpp +++ b/cmvr-es/service/grpc/stop_all/tests/stop_operation_dispatcher_test.cpp @@ -1,4 +1,4 @@ -#include "service/stop_all/include/stop_operation_dispatcher.h" +#include "service/grpc/stop_all/include/stop_operation_dispatcher.h" #include diff --git a/cmvr-es/service/quic_edge/CMakeLists.txt b/cmvr-es/service/quic_edge/CMakeLists.txt index a6562f83..3efed1be 100644 --- a/cmvr-es/service/quic_edge/CMakeLists.txt +++ b/cmvr-es/service/quic_edge/CMakeLists.txt @@ -14,7 +14,7 @@ target_include_directories(quic_edge_service PUBLIC ${PROJECT_SOURCE_DIR}/cmvr-e target_link_libraries(quic_edge_service PUBLIC cmvr_es::proto - cmvr_es::media_source_hub + cmvr_es::media_source_manager PRIVATE cmvr_es::device_media_source_adapter cmvr_es::device_manager @@ -29,7 +29,7 @@ if(BUILD_TESTING) target_compile_features(quic_edge_protocol_test PRIVATE cxx_std_17) target_link_libraries(quic_edge_protocol_test PRIVATE cmvr_es::quic_edge_service - cmvr_es::media_source_hub + cmvr_es::media_source_manager cmvr_es::stop_all_admission_gate Threads::Threads ) diff --git a/cmvr-es/service/quic_edge/include/quic_edge_service.h b/cmvr-es/service/quic_edge/include/quic_edge_service.h index 23eae61b..9b86af96 100644 --- a/cmvr-es/service/quic_edge/include/quic_edge_service.h +++ b/cmvr-es/service/quic_edge/include/quic_edge_service.h @@ -15,7 +15,7 @@ #include "cmvr/config/quic_edge_config/quic_edge_config.pb.h" #include "devices/device_types.h" -#include "manager/media_source_hub/include/media_source_hub.h" +#include "manager/media_source_manager/include/media_source_manager.h" #include "service/quic_edge/include/control_framing.h" #include "service/quic_edge/include/datagram_packetizer.h" #include "service/quic_edge/include/quic_transport.h" @@ -76,7 +76,7 @@ public: explicit QuicEdgeService(config::QuicEdgeConfig config); QuicEdgeService(config::QuicEdgeConfig config, std::unique_ptr transport, - media::MediaSourceHub& media_hub, + media::MediaSourceManager& media_hub, DeviceSnapshotProvider device_snapshot_provider = {}); ~QuicEdgeService(); @@ -106,7 +106,7 @@ private: struct ActiveTrack { config::QuicEdgeTrackConfig config; std::string source_track_id; - media::MediaSourceHub::Subscription subscription; + media::MediaSourceManager::Subscription subscription; std::optional last_description; bool waiting_for_keyframe{false}; bool keyframe_requested{false}; @@ -157,7 +157,7 @@ private: config::QuicEdgeConfig config_; std::unique_ptr transport_; - media::MediaSourceHub* media_hub_{nullptr}; + media::MediaSourceManager* media_hub_{nullptr}; bool using_global_media_hub_{false}; SourceRegistrar source_registrar_; DeviceSnapshotProvider device_snapshot_provider_; diff --git a/cmvr-es/service/quic_edge/include/quic_edge_types.h b/cmvr-es/service/quic_edge/include/quic_edge_types.h index 36fda822..cabfdd36 100644 --- a/cmvr-es/service/quic_edge/include/quic_edge_types.h +++ b/cmvr-es/service/quic_edge/include/quic_edge_types.h @@ -22,7 +22,7 @@ enum DatagramFlag : std::uint16_t { }; // All integer fields are serialized in network byte order. codec_generation -// is a compact token for the full 64-bit MediaSourceHub descriptor generation +// is a compact token for the full 64-bit MediaSourceManager descriptor generation // announced on the reliable control stream. struct DatagramHeader { std::uint8_t protocol_version{kProtocolVersion}; diff --git a/cmvr-es/service/quic_edge/src/quic_edge_device_adapter.cpp b/cmvr-es/service/quic_edge/src/quic_edge_device_adapter.cpp index 856535dc..0e1ba0fc 100644 --- a/cmvr-es/service/quic_edge/src/quic_edge_device_adapter.cpp +++ b/cmvr-es/service/quic_edge/src/quic_edge_device_adapter.cpp @@ -3,14 +3,14 @@ #include #include "manager/device_manager/include/device_manager.h" -#include "manager/media_source_hub/include/device_media_source_adapter.h" +#include "manager/media_source_manager/include/device_media_source_adapter.h" namespace cmvr::quic_edge { QuicEdgeService::QuicEdgeService(config::QuicEdgeConfig config) : config_(std::move(config)), transport_(createDefaultQuicTransport(config_.datagram_send_queue_depth())), - media_hub_(&media::globalMediaSourceHub()), + media_hub_(&media::globalMediaSourceManager()), using_global_media_hub_(true), device_snapshot_provider_([] { return device::DeviceManager::getInstance().snapshot(); @@ -57,7 +57,7 @@ QuicEdgeService::QuicEdgeService(config::QuicEdgeConfig config) } if (!registered && !media_hub_->hasSource(source_track_id)) { if (error) { - *error = "failed to register MediaSourceHub source: " + + *error = "failed to register MediaSourceManager source: " + source_track_id; } return false; diff --git a/cmvr-es/service/quic_edge/src/quic_edge_service.cpp b/cmvr-es/service/quic_edge/src/quic_edge_service.cpp index 0cdc02e2..2ea62c79 100644 --- a/cmvr-es/service/quic_edge/src/quic_edge_service.cpp +++ b/cmvr-es/service/quic_edge/src/quic_edge_service.cpp @@ -25,7 +25,7 @@ #include "cmvr/quic_edge/v1/quic_edge.pb.h" #include "common/base/logging/logger.h" #include "manager/device_manager/include/device_manager.h" -#include "manager/media_source_hub/include/device_media_source_adapter.h" +#include "manager/media_source_manager/include/device_media_source_adapter.h" namespace cmvr::quic_edge { namespace { @@ -423,7 +423,7 @@ const char* toString(const QuicEdgeServiceState state) QuicEdgeService::QuicEdgeService(config::QuicEdgeConfig config, std::unique_ptr transport, - media::MediaSourceHub& media_hub, + media::MediaSourceManager& media_hub, DeviceSnapshotProvider device_snapshot_provider) : config_(std::move(config)), transport_(std::move(transport)), @@ -598,7 +598,7 @@ bool QuicEdgeService::initialize(std::string* error) return false; } if (!transport_ || !media_hub_) { - const std::string message = "QUIC edge transport or MediaSourceHub is null"; + const std::string message = "QUIC edge transport or MediaSourceManager is null"; setState(QuicEdgeServiceState::FAILED, message); setError(error, message); return false; @@ -1453,18 +1453,18 @@ void QuicEdgeService::refreshMediaTracks( safety::DispatchGuard source_dispatch; if (using_global_media_hub_) { source_dispatch = media::beginMediaSourceStartDispatch( - device::DeviceManager::getInstance().safetyCoordinator(), + device::DeviceManager::getInstance().safetyManager(), track_config.device_id()); if (!source_dispatch.acquired()) { recordMediaError( - "MediaSourceHub safety admission rejected: " + + "MediaSourceManager safety admission rejected: " + track.source_track_id); continue; } } track.subscription = media_hub_->subscribe( track.source_track_id, - media::MediaSourceHub::StartPosition::LATEST_AVAILABLE, + media::MediaSourceManager::StartPosition::LATEST_AVAILABLE, [this, activity_generation] { std::lock_guard lock(mutex_); return stop_requested_ || media_stop_requested_ || @@ -1472,7 +1472,7 @@ void QuicEdgeService::refreshMediaTracks( }); if (!track.subscription.valid()) { recordMediaError( - "MediaSourceHub source unavailable: " + track.source_track_id); + "MediaSourceManager source unavailable: " + track.source_track_id); continue; } track.waiting_for_keyframe = @@ -1500,14 +1500,14 @@ bool QuicEdgeService::ensureSourceRegistered( { if (media_hub_->hasSource(source_track_id)) return true; if (!using_global_media_hub_ || !source_registrar_) { - setError(error, "MediaSourceHub source unavailable: " + source_track_id); + setError(error, "MediaSourceManager source unavailable: " + source_track_id); return false; } const bool registered = source_registrar_(track, source_track_id, error); if (!registered && !media_hub_->hasSource(source_track_id)) { if (!error || error->empty()) { setError(error, - "failed to register MediaSourceHub source: " + source_track_id); + "failed to register MediaSourceManager source: " + source_track_id); } return false; } @@ -1638,7 +1638,7 @@ bool QuicEdgeService::processTrack(ActiveTrack* track, if (!read) { if (!track->subscription.valid()) { recordMediaError( - "MediaSourceHub subscription stopped: " + track->source_track_id); + "MediaSourceManager subscription stopped: " + track->source_track_id); } return true; } @@ -1647,7 +1647,7 @@ bool QuicEdgeService::processTrack(ActiveTrack* track, if (!frame || !frame->descriptor || frame->descriptor->id != track->source_track_id || frame->descriptor->kind != expectedKind(track->config)) { - recordMediaError("MediaSourceHub returned an invalid or mismatched frame"); + recordMediaError("MediaSourceManager returned an invalid or mismatched frame"); track->next_frame_discontinuous = true; return true; } @@ -1667,7 +1667,7 @@ bool QuicEdgeService::processTrack(ActiveTrack* track, !track->last_description || *track->last_description != description; if (track->last_description && descriptor_changed && description.codec_generation < track->last_description->codec_generation) { - recordMediaError("MediaSourceHub descriptor generation regressed"); + recordMediaError("MediaSourceManager descriptor generation regressed"); track->next_frame_discontinuous = true; return true; } diff --git a/cmvr-es/service/quic_edge/tests/quic_edge_protocol_test.cpp b/cmvr-es/service/quic_edge/tests/quic_edge_protocol_test.cpp index f607d16f..b652a904 100644 --- a/cmvr-es/service/quic_edge/tests/quic_edge_protocol_test.cpp +++ b/cmvr-es/service/quic_edge/tests/quic_edge_protocol_test.cpp @@ -14,11 +14,11 @@ #include #include "cmvr/quic_edge/v1/quic_edge.pb.h" -#include "manager/media_source_hub/include/media_source_hub.h" +#include "manager/media_source_manager/include/media_source_manager.h" #include "service/quic_edge/include/control_framing.h" #include "service/quic_edge/include/datagram_packetizer.h" #include "service/quic_edge/include/quic_edge_service.h" -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" namespace { @@ -483,14 +483,14 @@ bool testPacketizer() bool testServiceWithSharedHub() { const std::string track_id = "camera-test/video/color"; - media::MediaSourceHub hub; - media::MediaSourceHub::FrameSink sink; + media::MediaSourceManager hub; + media::MediaSourceManager::FrameSink sink; std::mutex sink_mutex; std::atomic source_started{false}; std::atomic keyframe_requests{0}; - media::MediaSourceHub::SourceCallbacks callbacks; - callbacks.start = [&](const media::MediaSourceHub::FrameSink& value, - const media::MediaSourceHub::CancelPredicate&) { + media::MediaSourceManager::SourceCallbacks callbacks; + callbacks.start = [&](const media::MediaSourceManager::FrameSink& value, + const media::MediaSourceManager::CancelPredicate&) { std::lock_guard lock(sink_mutex); sink = value; source_started.store(true); @@ -528,7 +528,7 @@ bool testServiceWithSharedHub() frame_config.sequence = 1; frame_config.capture_time_ns = 1000000; frame_config.key_frame = true; - media::MediaSourceHub::FrameSink publisher; + media::MediaSourceManager::FrameSink publisher; { std::lock_guard lock(sink_mutex); publisher = sink; @@ -581,15 +581,15 @@ bool testMediaActivityInterruptPreservesPresenceAndResumes() { const std::string track_id = "camera-stop-all/video/color"; service::StopAllAdmissionGate admission; - media::MediaSourceHub hub(&admission); - media::MediaSourceHub::FrameSink sink; + media::MediaSourceManager hub(&admission); + media::MediaSourceManager::FrameSink sink; std::mutex sink_mutex; std::atomic source_started{false}; std::atomic source_starts{0U}; std::atomic source_stops{0U}; - media::MediaSourceHub::SourceCallbacks callbacks; - callbacks.start = [&](const media::MediaSourceHub::FrameSink& value, - const media::MediaSourceHub::CancelPredicate&) { + media::MediaSourceManager::SourceCallbacks callbacks; + callbacks.start = [&](const media::MediaSourceManager::FrameSink& value, + const media::MediaSourceManager::CancelPredicate&) { { std::lock_guard lock(sink_mutex); sink = value; @@ -620,7 +620,7 @@ bool testMediaActivityInterruptPreservesPresenceAndResumes() })); auto publish = [&](const std::uint64_t sequence) { - media::MediaSourceHub::FrameSink publisher; + media::MediaSourceManager::FrameSink publisher; { std::lock_guard lock(sink_mutex); publisher = sink; @@ -680,12 +680,12 @@ bool testMediaActivityInterruptCancelsStartingSubscription() { const std::string track_id = "slow-stop-all/video/color"; service::StopAllAdmissionGate admission; - media::MediaSourceHub hub(&admission); + media::MediaSourceManager hub(&admission); std::atomic start_entered{false}; std::atomic start_cancelled{false}; - media::MediaSourceHub::SourceCallbacks callbacks; - callbacks.start = [&](const media::MediaSourceHub::FrameSink&, - const media::MediaSourceHub::CancelPredicate& cancelled) { + media::MediaSourceManager::SourceCallbacks callbacks; + callbacks.start = [&](const media::MediaSourceManager::FrameSink&, + const media::MediaSourceManager::CancelPredicate& cancelled) { start_entered.store(true); while (!cancelled()) { std::this_thread::sleep_for(std::chrono::milliseconds(2)); @@ -727,7 +727,7 @@ bool testMediaActivityInterruptCancelsStartingSubscription() bool testMissingInjectedSourceRetriesSafely() { - media::MediaSourceHub hub; + media::MediaSourceManager hub; auto transport = std::make_unique(); FakeTransport* transport_view = transport.get(); quic_edge::QuicEdgeService service( @@ -746,7 +746,7 @@ bool testMissingInjectedSourceRetriesSafely() bool testPresenceOnlyWithoutMedia() { - media::MediaSourceHub hub; + media::MediaSourceManager hub; auto transport = std::make_unique(); FakeTransport* transport_view = transport.get(); quic_edge::QuicEdgeService service( @@ -809,7 +809,7 @@ bool testDeviceManagerSnapshotInHeartbeat() failed.status_updated_at_unix_ms = 303U; snapshot.devices.push_back(failed); - media::MediaSourceHub hub; + media::MediaSourceManager hub; auto transport = std::make_unique(); FakeTransport* transport_view = transport.get(); quic_edge::QuicEdgeService service( @@ -943,7 +943,7 @@ bool testAllDeviceKindAndStateMappings() snapshot.devices.push_back(std::move(row)); } - media::MediaSourceHub hub; + media::MediaSourceManager hub; auto transport = std::make_unique(); FakeTransport* transport_view = transport.get(); quic_edge::QuicEdgeService service( @@ -974,7 +974,7 @@ bool testAllDeviceKindAndStateMappings() bool testConfiguredHeartbeatIntervalWithoutGatewayOverride() { - media::MediaSourceHub hub; + media::MediaSourceManager hub; auto transport = std::make_unique( true, true, true, 0U, 0U); FakeTransport* transport_view = transport.get(); @@ -1001,7 +1001,7 @@ bool testConfiguredHeartbeatIntervalWithoutGatewayOverride() bool testSnapshotLatencyDoesNotConsumeAckDeadline() { - media::MediaSourceHub hub; + media::MediaSourceManager hub; auto transport = std::make_unique( true, true, true, 0U, 250U, 70U); FakeTransport* transport_view = transport.get(); @@ -1026,7 +1026,7 @@ bool testSnapshotLatencyDoesNotConsumeAckDeadline() bool testHeartbeatTimeoutReconnectsWithoutTaskFailure() { - media::MediaSourceHub hub; + media::MediaSourceManager hub; auto transport = std::make_unique(true, false); FakeTransport* transport_view = transport.get(); auto config = validPresenceOnlyConfig(); @@ -1046,7 +1046,7 @@ bool testHeartbeatTimeoutReconnectsWithoutTaskFailure() bool testRegistrationRejectionBacksOff() { - media::MediaSourceHub hub; + media::MediaSourceManager hub; auto transport = std::make_unique(false, true); FakeTransport* transport_view = transport.get(); auto config = validPresenceOnlyConfig(); @@ -1074,7 +1074,7 @@ bool testRegistrationRejectionBacksOff() bool testHeartbeatAckRequiresSessionId() { - media::MediaSourceHub hub; + media::MediaSourceManager hub; auto transport = std::make_unique(true, true, false); FakeTransport* transport_view = transport.get(); quic_edge::QuicEdgeService service( @@ -1095,13 +1095,13 @@ bool testHeartbeatAckRequiresSessionId() bool testSlowMediaStartDoesNotBlockHeartbeat() { const std::string track_id = "slow-camera/video/color"; - media::MediaSourceHub hub; + media::MediaSourceManager hub; std::atomic start_entered{false}; std::atomic start_exited{false}; std::atomic release_start{false}; - media::MediaSourceHub::SourceCallbacks callbacks; - callbacks.start = [&](const media::MediaSourceHub::FrameSink&, - const media::MediaSourceHub::CancelPredicate& cancelled) { + media::MediaSourceManager::SourceCallbacks callbacks; + callbacks.start = [&](const media::MediaSourceManager::FrameSink&, + const media::MediaSourceManager::CancelPredicate& cancelled) { start_entered.store(true); while (!release_start.load() && !cancelled()) { std::this_thread::sleep_for(std::chrono::milliseconds(2)); @@ -1148,7 +1148,7 @@ bool testSlowMediaStartDoesNotBlockHeartbeat() bool testLifecycleStateGuards() { - media::MediaSourceHub hub; + media::MediaSourceManager hub; { auto transport = std::make_unique(); quic_edge::QuicEdgeService service( @@ -1180,7 +1180,7 @@ bool testLifecycleStateGuards() bool testRobotIdIsRequired() { - media::MediaSourceHub hub; + media::MediaSourceManager hub; auto config = validPresenceOnlyConfig(); config.clear_robot_id(); auto transport = std::make_unique(); diff --git a/cmvr-es/task/CMakeLists.txt b/cmvr-es/task/CMakeLists.txt index d9952ab0..05d0896d 100644 --- a/cmvr-es/task/CMakeLists.txt +++ b/cmvr-es/task/CMakeLists.txt @@ -12,7 +12,7 @@ target_link_libraries(task cmvr_es::ik_solver cmvr_es::base_motion cmvr_es::self_collision_checker - cmvr_es::control_authority + cmvr_es::control_authority_manager PRIVATE cmvr_es::device_manager cmvr_es::stop_all_admission_gate diff --git a/cmvr-es/task/grpc_server_task/src/grpc_server_task.cpp b/cmvr-es/task/grpc_server_task/src/grpc_server_task.cpp index 4356d607..c7799fc2 100644 --- a/cmvr-es/task/grpc_server_task/src/grpc_server_task.cpp +++ b/cmvr-es/task/grpc_server_task/src/grpc_server_task.cpp @@ -11,21 +11,21 @@ #include "common/config/config_files.h" #include "devices/arm/robot_arm.h" #include "manager/device_manager/include/device_manager.h" -#include "service/grpc/include/grpc_agv_service.h" -#include "service/grpc/include/grpc_arm_service.h" -#include "service/grpc/include/grpc_arm_teleop_service.h" -#include "service/grpc/include/grpc_robot_arm_teleop_backend.h" -#include "service/grpc/include/grpc_recovery_audit.h" -#include "service/grpc/include/grpc_security.h" -#include "service/grpc/include/grpc_camera_service.h" -#include "service/grpc/include/grpc_dexhand_service.h" -#include "service/grpc/include/grpc_error_logging_interceptor.h" -#include "service/grpc/include/grpc_head_service.h" -#include "service/grpc/include/grpc_hlc_service.h" -#include "service/grpc/include/grpc_microphone_service.h" -#include "service/grpc/include/grpc_motor_service.h" -#include "service/grpc/include/grpc_speaker_service.h" -#include "service/grpc/include/grpc_system_service.h" +#include "service/grpc/server/include/grpc_agv_service.h" +#include "service/grpc/server/include/grpc_arm_service.h" +#include "service/grpc/server/include/grpc_arm_teleop_service.h" +#include "service/grpc/server/include/grpc_robot_arm_teleop_backend.h" +#include "service/grpc/server/include/grpc_recovery_audit.h" +#include "service/grpc/server/include/grpc_security.h" +#include "service/grpc/server/include/grpc_camera_service.h" +#include "service/grpc/server/include/grpc_dexhand_service.h" +#include "service/grpc/server/include/grpc_error_logging_interceptor.h" +#include "service/grpc/server/include/grpc_head_service.h" +#include "service/grpc/server/include/grpc_hlc_service.h" +#include "service/grpc/server/include/grpc_microphone_service.h" +#include "service/grpc/server/include/grpc_motor_service.h" +#include "service/grpc/server/include/grpc_speaker_service.h" +#include "service/grpc/server/include/grpc_system_service.h" #include "task/task_factory.h" namespace cmvr::task { @@ -136,7 +136,7 @@ bool GrpcServerTask::start() : service::makeDisabledArmTeleopBackend(), nullptr, security_gateway_, - &device::DeviceManager::getInstance().safetyCoordinator()); + &device::DeviceManager::getInstance().safetyManager()); motor_service_ = std::make_unique(security_gateway_); agv_service_ = diff --git a/cmvr-es/task/quic_edge_task/src/quic_edge_task.cpp b/cmvr-es/task/quic_edge_task/src/quic_edge_task.cpp index a37bb855..fe5d2293 100644 --- a/cmvr-es/task/quic_edge_task/src/quic_edge_task.cpp +++ b/cmvr-es/task/quic_edge_task/src/quic_edge_task.cpp @@ -8,7 +8,7 @@ #include "cmvr/config/task_manager_config/task_manager_config.pb.h" #include "common/base/logging/logger.h" -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" #include "common/config/config_files.h" #include "manager/device_manager/include/device_manager.h" #include "task/task_factory.h" diff --git a/cmvr-es/task/quic_edge_task/tests/quic_edge_task_test.cpp b/cmvr-es/task/quic_edge_task/tests/quic_edge_task_test.cpp index 99a05f00..06e6124c 100644 --- a/cmvr-es/task/quic_edge_task/tests/quic_edge_task_test.cpp +++ b/cmvr-es/task/quic_edge_task/tests/quic_edge_task_test.cpp @@ -12,9 +12,9 @@ #include #include "cmvr/quic_edge/v1/quic_edge.pb.h" -#include "manager/media_source_hub/include/media_source_hub.h" +#include "manager/media_source_manager/include/media_source_manager.h" #include "service/quic_edge/include/control_framing.h" -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" #include "task/quic_edge_task/include/quic_edge_task.h" namespace { @@ -299,7 +299,7 @@ int main() admission_task.stop(); admission.clearForTesting(); - cmvr::media::MediaSourceHub media_hub; + cmvr::media::MediaSourceManager media_hub; std::vector transports; std::vector services; std::vector expanded_configs; diff --git a/cmvr-es/task/touch_screen_task/include/touch_screen_task.h b/cmvr-es/task/touch_screen_task/include/touch_screen_task.h index 4198c9e6..e94cabf1 100644 --- a/cmvr-es/task/touch_screen_task/include/touch_screen_task.h +++ b/cmvr-es/task/touch_screen_task/include/touch_screen_task.h @@ -19,7 +19,7 @@ #include "devices/camera/abstract_camera.h" #include "devices/dexhand/abstract_dexhand.h" #include "devices/arm/robot_arm.h" -#include "manager/control_authority/include/control_authority_manager.h" +#include "manager/control_authority_manager/include/control_authority_manager.h" #include "task/task.h" #include "algorithms/perception/apriltag/include/apriltag_perception.h" #include "algorithms/perception/apriltag/include/tag_relative_target_3d.h" diff --git a/cmvr-es/task/touch_screen_task/src/touch_screen_admission_test.cpp b/cmvr-es/task/touch_screen_task/src/touch_screen_admission_test.cpp index f8ef3ecc..f02cd579 100644 --- a/cmvr-es/task/touch_screen_task/src/touch_screen_admission_test.cpp +++ b/cmvr-es/task/touch_screen_task/src/touch_screen_admission_test.cpp @@ -11,8 +11,8 @@ #include #include "manager/device_manager/include/device_manager.h" -#include "service/grpc/include/camera_operational_activity_registry.h" -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "service/grpc/server/include/camera_operational_activity_registry.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" #include "task/touch_screen_task/include/touch_screen_task.h" namespace cmvr::task { diff --git a/cmvr-es/task/touch_screen_task/src/touch_screen_task.cpp b/cmvr-es/task/touch_screen_task/src/touch_screen_task.cpp index 7ec8dc77..85572300 100644 --- a/cmvr-es/task/touch_screen_task/src/touch_screen_task.cpp +++ b/cmvr-es/task/touch_screen_task/src/touch_screen_task.cpp @@ -12,8 +12,8 @@ #include "algorithms/kinematics/ik_solver/pinocchio/include/pinocchio_ik_base.h" #include "cmvr/config/touch_screen_algorithm_config.pb.h" #include "manager/device_manager/include/device_manager.h" -#include "service/grpc/include/camera_operational_activity_registry.h" -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "service/grpc/server/include/camera_operational_activity_registry.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" #include namespace cmvr::task { diff --git a/cmvr-es/task/ume_teleop_task/include/ume_teleop_task.h b/cmvr-es/task/ume_teleop_task/include/ume_teleop_task.h index 9886e6ff..14353b8d 100644 --- a/cmvr-es/task/ume_teleop_task/include/ume_teleop_task.h +++ b/cmvr-es/task/ume_teleop_task/include/ume_teleop_task.h @@ -12,7 +12,7 @@ #include #include "cmvr/config/ume_teleop_config/ume_teleop_config.pb.h" -#include "service/arm_teleop_client/include/grpc_arm_teleop_client.h" +#include "service/grpc/client/include/grpc_arm_teleop_client.h" #include "task/task.h" namespace cmvr::task { diff --git a/cmvr-es/task/ume_teleop_task/src/ume_teleop_task.cpp b/cmvr-es/task/ume_teleop_task/src/ume_teleop_task.cpp index 4caec47d..c793f074 100644 --- a/cmvr-es/task/ume_teleop_task/src/ume_teleop_task.cpp +++ b/cmvr-es/task/ume_teleop_task/src/ume_teleop_task.cpp @@ -11,7 +11,7 @@ #include "cmvr/config/task_manager_config/task_manager_config.pb.h" #include "common/base/logging/logger.h" -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" #include "common/config/config_files.h" #include "task/task_factory.h" diff --git a/cmvr-es/task/ume_teleop_task/tests/ume_teleop_task_test.cpp b/cmvr-es/task/ume_teleop_task/tests/ume_teleop_task_test.cpp index a075ffcc..67766831 100644 --- a/cmvr-es/task/ume_teleop_task/tests/ume_teleop_task_test.cpp +++ b/cmvr-es/task/ume_teleop_task/tests/ume_teleop_task_test.cpp @@ -13,8 +13,8 @@ #include #include "cmvr/api/arm_teleop_v1.grpc.pb.h" -#include "service/arm_teleop_client/include/grpc_arm_teleop_client.h" -#include "service/stop_all/include/stop_all_admission_gate.h" +#include "service/grpc/client/include/grpc_arm_teleop_client.h" +#include "service/grpc/stop_all/include/stop_all_admission_gate.h" #include "task/ume_teleop_task/include/ume_teleop_task.h" namespace { diff --git a/docs/device_safety_control_plane_architecture.md b/docs/device_safety_control_plane_architecture.md index 693e53a5..bf49c37e 100644 --- a/docs/device_safety_control_plane_architecture.md +++ b/docs/device_safety_control_plane_architecture.md @@ -19,7 +19,7 @@ | --- | --- | --- | --- | | 0 | 软件完成 | 统一 RequestContext、完整 method policy/call guard、anonymous principal、显式 Insecure/Disabled 配置、RecoveryExposure 和持久审计边界 | TLS、Token、JWT、mTLS provider 按本轮决策不实现 | | 1 | 软件完成 | safety types、SnapshotStore、设备 adapter、公共 reason/execution state、service instance、CommandLedger | 厂商结果语义仍需逐台真机校准 | -| 2 | 软件完成 | DeviceManager 持有 SafetyCoordinator、legacy participant、GetSafetyState、启动 coverage 校验、Shadow/Enforce 配置 | 真实运行 Shadow 日志评审 | +| 2 | 软件完成 | DeviceManager 持有 SafetyManager、legacy participant、GetSafetyState、启动 coverage 校验、Shadow/Enforce 配置 | 真实运行 Shadow 日志评审 | | 3 | 软件完成 | Arm、ArmTeleop、AGV、Motor、DexHand、PTZ、ActionQueue 统一准入;dispatch 前 permit/final check;PTZ START/STOP 服务端派生 lane | 每类设备真实停车确认和 ACK/断网故障注入 | | 4 | 软件完成 | 通用 participant StopAll、RecoveryLedger、RecoverSafetyState、LocalOnly/Authorized policy、审计失败 fail-closed、shutdown quiesce | LocalOnly 现场入口和审计文件运维验收 | | 5 | 部分完成 | Camera/Microphone/Speaker/BioHead/HLC、TouchScreenTask、媒体 Hub/QUIC Sensor start 已迁移;Enforce 启动覆盖校验已实现 | 默认切换 EnforceAll、删除兼容 gate、capability manifest、安装产物 smoke、TSAN 和真机台架 | @@ -38,7 +38,7 @@ AUBO 另有一条设备内硬件语义:真实硬件急停曾有效、随后输 本设计采用以下核心决策: 1. `DeviceManager` 继续负责设备注册和生命周期,并持有一个独立、可测试的 - `SafetyCoordinator`。状态机代码不直接堆入 `DeviceManager`。 + `SafetyManager`。状态机代码不直接堆入 `DeviceManager`。 2. Service 不再自行组合 StopAll gate、设备状态和控制权判断。所有会改变设备或 活动状态的命令必须声明 `CommandIntent`,通过统一准入获得短生命周期的 `AdmissionPermit`。 @@ -58,7 +58,7 @@ AUBO 另有一条设备内硬件语义:真实硬件急停曾有效、随后输 10. 认证关闭时由服务端注入固定的 `anonymous` principal,不能接受客户端自报身份或角色; `RecoverSafetyState` 默认禁用,只有本机受限模式可以显式开放。 11. 传输加密、身份认证和方法授权是三个正交层。后续增加静态 Token、JWT 或 mTLS 时, - 只能替换安全网关组件,不修改设备、`SafetyCoordinator` 或业务 Proto。 + 只能替换安全网关组件,不修改设备、`SafetyManager` 或业务 Proto。 12. 该软件控制面不替代独立物理急停,也不声明 SIL、PL 或其他功能安全等级。 ## 2. 改造前基础与需要保留的行为 @@ -67,7 +67,7 @@ AUBO 另有一条设备内硬件语义:真实硬件急停曾有效、随后输 | 当前能力 | 目标用法 | | --- | --- | -| `ControlAuthorityManager` 的 lease、generation、dispatch fence、quarantine | 作为 `SafetyCoordinator` 内部控制权组件 | +| `ControlAuthorityManager` 的 lease、generation、dispatch fence、quarantine | 作为 `SafetyManager` 内部控制权组件 | | `StopAllAdmissionGate` 的并发 round 和失败后 fail-closed | 作为阶段 2、3 的兼容参与者,最终由统一状态机接管 | | `ActionQueueExecutor` 的 `action_id`、service instance 和精确 retired ID 账本 | 作为普通命令幂等账本的语义模板 | | Motor、Media、Camera activity coordinator | 先包装为 `SafetyParticipant`,最后逐步合并 | @@ -91,9 +91,9 @@ AUBO 另有一条设备内硬件语义:真实硬件急停曾有效、随后输 当前实现锚点: - gRPC 监听和 credentials:`cmvr-es/task/grpc_server_task/src/grpc_server_task.cpp`; -- SystemService StopAll:`cmvr-es/service/grpc/src/grpc_system_service.cpp`; -- 全局 gate:`cmvr-es/service/stop_all/include/stop_all_admission_gate.h`; -- 控制权:`cmvr-es/manager/control_authority/include/control_authority_manager.h`; +- SystemService StopAll:`cmvr-es/service/grpc/server/src/grpc_system_service.cpp`; +- 全局 gate:`cmvr-es/service/grpc/stop_all/include/stop_all_admission_gate.h`; +- 控制权:`cmvr-es/manager/control_authority_manager/include/control_authority_manager.h`; - 设备生命周期和快照:`cmvr-es/manager/device_manager/`; - 通用请求头:`protos/cmvr/api/common.proto`; - System API:`protos/cmvr/api/system_service.proto` 和 `system_command.proto`。 @@ -132,7 +132,7 @@ AUBO 另有一条设备内硬件语义:真实硬件急停曾有效、随后输 6. 相同 ID、不同语义 payload 必须返回冲突,不能覆盖旧记录。 7. 硬件结果不确定时保存 `OUTCOME_UNKNOWN`,重试只能查询该结果,不能再次下发。 8. 恢复成功只表示软件准入可重新评估,不表示设备被上电、使能、解除急停或自动运动。 -9. `SafetyCoordinator` 持有内部锁时不得调用设备、网络或可能阻塞的 participant 方法。 +9. `SafetyManager` 持有内部锁时不得调用设备、网络或可能阻塞的 participant 方法。 10. 驱动最终安全检查失败时,即使已经获得 permit,也不能下发设备命令。 11. 进程重启后,控制设备在新鲜状态确认完成前不能自动恢复到可控制状态。 12. 所有安全状态转换都增加 epoch、产生事件,并记录明确 reason code。 @@ -262,7 +262,7 @@ flowchart LR Client["gRPC / QUIC / Local Task"] --> Gateway["Request Context Gateway
限制 可选认证 授权策略 审计"] Gateway --> Adapter["Typed Service Adapter
声明 CommandIntent"] Adapter --> Ledger["CommandLedger
幂等和结果"] - Adapter --> Coordinator["DeviceManager::SafetyCoordinator"] + Adapter --> Coordinator["DeviceManager::SafetyManager"] Coordinator --> Policy["SensorPolicy / ControlPolicy"] Coordinator --> Authority["ControlAuthorityManager"] Coordinator --> Participants["SafetyParticipant Registry"] @@ -276,7 +276,7 @@ flowchart LR ### 5.1 建议目录 ```text -cmvr-es/manager/safety/ +cmvr-es/manager/safety_manager/ include/safety_types.h include/safety_reason.h include/device_safety_endpoint.h @@ -285,7 +285,7 @@ cmvr-es/manager/safety/ include/command_admission_controller.h include/command_ledger.h include/safety_operation_orchestrator.h - include/safety_coordinator.h + include/safety_manager.h src/... tests/... @@ -299,7 +299,7 @@ cmvr-es/service/grpc/security/ tests/... ``` -新增 CMake target:`cmvr_es::safety_coordinator`。它可以依赖通用类型和 +新增 CMake target:`cmvr_es::safety_manager`。它可以依赖通用类型和 `ControlAuthorityManager`,但不能依赖 gRPC、具体设备后端或厂商 SDK。 ### 5.2 `DeviceManager` 的职责变化 @@ -307,8 +307,8 @@ cmvr-es/service/grpc/security/ `DeviceManager` 增加: ```cpp -SafetyCoordinator& safetyCoordinator() noexcept; -const SafetyCoordinator& safetyCoordinator() const noexcept; +SafetyManager& safetyManager() noexcept; +const SafetyManager& safetyManager() const noexcept; ``` 它负责: @@ -332,7 +332,7 @@ const SafetyCoordinator& safetyCoordinator() const noexcept; ```cpp DeviceManager& -SafetyCoordinator& +SafetyManager& CommandLedger& GrpcSecurityGateway& ``` @@ -353,7 +353,7 @@ gRPC 管理面仍能启动。目标 Runtime 启动顺序为: ```text load config and logging - -> construct DeviceManager core and SafetyCoordinator + -> construct DeviceManager core and SafetyManager -> validate selected gRPC security profile and start management-plane services -> initialize/start devices -> reconcile required control snapshots @@ -361,7 +361,7 @@ load config and logging -> Open with device-level Blocked, or global Latched ``` -- 配置损坏、所选安全 Profile 的身份材料无效或 SafetyCoordinator 核心构造失败仍使进程启动失败; +- 配置损坏、所选安全 Profile 的身份材料无效或 SafetyManager 核心构造失败仍使进程启动失败; - `AuthenticationMode::Disabled` 是显式兼容模式,不伪装成“已认证”;如果使用非 loopback 明文监听,启动日志、GetSystemInfo 和指标必须持续暴露该风险; - 单个设备 create/init/start 失败记录在 inventory,并使相关资源 Blocked; @@ -497,7 +497,7 @@ ACK 或写入总线分别可能具有不同强度,不能统一解释成“运 3. CommandLedger 按 effective principal 预留 ID,并计算语义 payload hash;Disabled 模式使用 服务端固定的 `anonymous` namespace。 4. 若存在同 ID 记录:相同 hash 返回/等待原结果;不同 hash 返回冲突。 -5. Service 使用固定 `CommandDescriptor` 调用 `SafetyCoordinator::admit()`。 +5. Service 使用固定 `CommandDescriptor` 调用 `SafetyManager::admit()`。 6. Coordinator 在短锁内读取 global state、safety epoch、device slot 和 cached snapshot。 7. Policy 判断意图、freshness、硬件事实、设备状态和调用角色。 8. Control intent 获取或校验 `ControlAuthorityManager` lease。 @@ -615,7 +615,7 @@ struct DeviceSafetyRegistration { - 配置要求严格启动时,可以直接使 Runtime 初始化失败。 新增全新 DeviceKind 仍可能需要修改现有 DeviceFactory、配置 Proto 和对外业务 API;本设计 -保证的是不再修改 SafetyCoordinator、StopAll 和 Recover 的设备类型分支。 +保证的是不再修改 SafetyManager、StopAll 和 Recover 的设备类型分支。 ### 10.2 Endpoint @@ -667,7 +667,7 @@ public: }; ``` -participant 可以代表设备,也可以代表 ActionQueue、MediaSourceHub、Motor session registry 等 +participant 可以代表设备,也可以代表 ActionQueue、MediaSourceManager、Motor session registry 等 跨设备活动域。StopAll 不再知道具体 C++ 设备类型。 ## 11. CommandLedger 与结果语义 @@ -1046,7 +1046,7 @@ public: 但不能依赖 thread-local 在 interceptor 和 handler 之间传递身份;同步、异步和 callback RPC 都必须 具有明确的 per-call 所有权。 -`SafetyCoordinator` 不依赖 gRPC 类型。Service 只把从 `RequestContext` 派生的稳定 +`SafetyManager` 不依赖 gRPC 类型。Service 只把从 `RequestContext` 派生的稳定 `CommandActor`/capability 传给准入和 ledger;驱动层完全不可见认证方式。 ### 16.3 部署 Profile @@ -1155,7 +1155,7 @@ Profile 决定。 以下内容不应因认证升级而修改: - 设备命令 request/feedback Proto; -- `DeviceManager`、`SafetyCoordinator`、Sensor/Control policy; +- `DeviceManager`、`SafetyManager`、Sensor/Control policy; - `DeviceSafetyEndpoint`、`SafetyParticipant` 和厂商驱动; - handler 内的命令准入、StopAll 或 Recover 业务分支。 @@ -1165,12 +1165,12 @@ Profile 决定。 ## 17. 配置设计 -### 17.1 SafetyCoordinatorConfig +### 17.1 SafetyManagerConfig 建议在 `DeviceManagerConfig` 中增加: ```protobuf -message SafetyCoordinatorConfig { +message SafetyManagerConfig { enum EnforcementMode { ENFORCEMENT_MODE_UNSPECIFIED = 0; LEGACY = 1; @@ -1295,7 +1295,7 @@ capability manifest/SystemInfo。 | MotorManager/Motor | Control | bus session epoch、CiA402 state、enabled、quick-stop、actual velocity | 每个 motor resource 注册;Quick Stop 未确认则 quarantine | | DexHand control | Control | hand lifecycle、command generation、actuator idle | tactile stream 与控制命令分开分类;stopOperationalActivity 必须可证明 | | DexHand tactile | Sensor | polling worker、sample freshness | StopAll 可停 stream,但不能把 stream 状态当作手部运动状态 | -| Camera capture | Sensor | opened、streaming、worker generation | 复用 MediaSourceHub;gRPC/QUIC 和直接 startStreaming 在启动设备 producer 前取得 Sensor/StartActivity dispatch guard | +| Camera capture | Sensor | opened、streaming、worker generation | 复用 MediaSourceManager;gRPC/QUIC 和直接 startStreaming 在启动设备 producer 前取得 Sensor/StartActivity dispatch guard | | Camera PTZ | Control | PTZ activity generation、stop ACK | 服务端按已校验 action 派生 START=Actuate、STOP=安全通道,锁止时 STOP 仍可下发 | | Microphone | Sensor | capture lifecycle、sample freshness | activity participant | | Speaker | Sensor | playback lifecycle、worker generation | Stop 始终允许;不视为机械执行器 | @@ -1314,7 +1314,7 @@ Aubo JSON `get_di/get_do` 可以归类 Observe;`set_do` 必须归类 Configure | --- | --- | --- | | 0 | RequestContext、AuthN/AuthZ/Audit 扩展边界 | 否,显式保持现有兼容行为 | | 1 | 类型、快照、错误、幂等契约 | 否,旧 gate 仍权威 | -| 2 | SafetyCoordinator shadow | 否,只比较决策 | +| 2 | SafetyManager shadow | 否,只比较决策 | | 3 | 高风险设备逐个 enforce | 仅改变选中设备 | | 4 | 泛化 StopAll、正式 Recover | 改变系统安全事务 | | 5 | EnforceAll、真机签字、移除旧路径 | 全量切换 | @@ -1386,7 +1386,7 @@ Aubo JSON `get_di/get_do` 可以归类 Observe;`set_do` 必须归类 Configure #### 实施项 -1. 新建 `manager/safety` target 和 `safety_types.h`。 +1. 新建 `manager/safety_manager` target 和 `safety_types.h`。 2. 定义 CommandIntent、SafetyCondition、TriState、SafetyBlocker、SafetySnapshot。 3. 定义 DeviceSafetyDescriptor、Endpoint、Participant 接口。 4. 在 DeviceManager 中建立 `SafetySnapshotStore`,Manager snapshot 只读缓存。 @@ -1420,7 +1420,7 @@ Aubo JSON `get_di/get_do` 可以归类 Observe;`set_do` 必须归类 Configure 新 Proto 字段不可删除或复用;可以停止使用新字段,但必须保留 wire schema。SnapshotStore 可以退回仅诊断模式,不影响旧 gate。 -### 阶段 2:SafetyCoordinator 影子运行 +### 阶段 2:SafetyManager 影子运行 #### 目标 @@ -1428,7 +1428,7 @@ Aubo JSON `get_di/get_do` 可以归类 Observe;`set_do` 必须归类 Configure #### 实施项 -1. DeviceManager 构造并持有 SafetyCoordinator。 +1. DeviceManager 构造并持有 SafetyManager。 2. 在阶段 0 的 GrpcMethodPolicyRegistry 中补齐 CommandIntent,并引入 typed CommandDescriptor。 3. gRPC service 增加可注入构造函数;GrpcServerTask 统一传入 coordinator/ledger,沿用既有 GrpcSecurityGateway。 @@ -1476,7 +1476,7 @@ Aubo JSON `get_di/get_do` 可以归类 Observe;`set_do` 必须归类 Configure #### 目标 让 Arm、Teleoperation、AGV、Motor、DexHand control 和 Camera PTZ 的普通命令由 -SafetyCoordinator 权威准入,并统一幂等与执行结果语义。 +SafetyManager 权威准入,并统一幂等与执行结果语义。 #### 迁移顺序 @@ -1527,7 +1527,7 @@ SafetyCoordinator 权威准入,并统一幂等与执行结果语义。 - 每类命令都有结构化结果,Internal 不再承载所有业务错误; - 旧 gate 只作为兼容 deny,不再能单独 reopen 新 Coordinator; - 设备级 OutcomeUnknown 可通过 GetSafetyState 定位并进入恢复流程; -- 新控制设备接入安全层不需要修改 SafetyCoordinator switch。 +- 新控制设备接入安全层不需要修改 SafetyManager switch。 #### 回滚边界 @@ -1761,7 +1761,7 @@ Coordinator 保存有界内存事件环,并将关键事件写入持久审计 4. Safety types、snapshot store 和 tests; 5. CommandHeader/reason code additive Proto; 6. CommandLedger; -7. SafetyCoordinator shadow 和 GetSafetyState; +7. SafetyManager shadow 和 GetSafetyState; 8. legacy participant adapters; 9. Arm + ArmTeleop migration; 10. AGV migration; diff --git a/protos/cmvr/config/device_manager_config/device_manager_config.proto b/protos/cmvr/config/device_manager_config/device_manager_config.proto index 6c2e1ad0..ff60aac7 100644 --- a/protos/cmvr/config/device_manager_config/device_manager_config.proto +++ b/protos/cmvr/config/device_manager_config/device_manager_config.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package cmvr.config; -message SafetyCoordinatorConfig { +message SafetyManagerConfig { enum EnforcementMode { ENFORCEMENT_MODE_UNSPECIFIED = 0; LEGACY = 1; @@ -58,7 +58,7 @@ message DeviceManagerConfig { string description = 3; repeated DeviceConfigEntry devices = 4; bool init_all_motors_when_no_active_joints = 20; - SafetyCoordinatorConfig safety = 21; + SafetyManagerConfig safety = 21; } message DeviceManagerRootConfig { DeviceManagerConfig device_manager = 1; diff --git a/protos/cmvr/config/quic_edge_config/quic_edge_config.proto b/protos/cmvr/config/quic_edge_config/quic_edge_config.proto index 8e01ef93..8a26f1d8 100644 --- a/protos/cmvr/config/quic_edge_config/quic_edge_config.proto +++ b/protos/cmvr/config/quic_edge_config/quic_edge_config.proto @@ -36,7 +36,7 @@ message QuicEdgeTrackConfig { // Zero uses QuicEdgeConfig.maximum_frame_bytes. uint32 max_frame_bytes = 5; - // Protocol-neutral MediaSourceHub track ID. When empty, the service derives + // Protocol-neutral MediaSourceManager track ID. When empty, the service derives // the default ID from source_kind and device_id (for example // "right_hand_cam/video/color"). The Hub's descriptor is the authority for // codec metadata and descriptor generation. diff --git a/protos/cmvr/quic_edge/v1/README.md b/protos/cmvr/quic_edge/v1/README.md index f34377e8..5874f64f 100644 --- a/protos/cmvr/quic_edge/v1/README.md +++ b/protos/cmvr/quic_edge/v1/README.md @@ -70,7 +70,7 @@ MsQuic/TLS/UDP and implements the v1 control and DATAGRAM receiver. With the strict build above, CTest registers: - `cmvr_quic_msquic_e2e_test`, which connects the production edge service and - feeds synthetic H.264 video plus AAC audio through `MediaSourceHub`, then + feeds synthetic H.264 video plus AAC audio through `MediaSourceManager`, then verifies registration, heartbeat, descriptors, DATAGRAMs and frame reassembly; - `cmvr_es_quic_process_smoke_test`, which starts the actual `cmvr_es` @@ -216,7 +216,7 @@ heartbeat therefore continue while a media source is slow or unavailable; the reliable send path serializes heartbeat and media metadata so envelope sequence order remains strict. -`MediaSourceHub` is protocol-neutral and gives each adapter an independent, +`MediaSourceManager` is protocol-neutral and gives each adapter an independent, single-consumer subscription cursor. Its source-start callback receives a cancellation predicate and must check it around potentially blocking device startup. QUIC reconnect/stop and gRPC client cancellation can therefore abandon diff --git a/protos/cmvr/quic_edge/v1/quic_edge.proto b/protos/cmvr/quic_edge/v1/quic_edge.proto index 48f3a321..6003fd14 100644 --- a/protos/cmvr/quic_edge/v1/quic_edge.proto +++ b/protos/cmvr/quic_edge/v1/quic_edge.proto @@ -197,7 +197,7 @@ message MediaTrackDescriptor { string codec = 4; uint64 codec_generation = 5; - // The exact MediaSourceHub track and the 32-bit token repeated in every + // The exact MediaSourceManager track and the 32-bit token repeated in every // DATAGRAM header. The full generation remains on the reliable stream. string source_track_id = 6; uint32 codec_generation_token = 7; diff --git a/test/e2e/CMakeLists.txt b/test/e2e/CMakeLists.txt index 88649bd6..15b4b148 100644 --- a/test/e2e/CMakeLists.txt +++ b/test/e2e/CMakeLists.txt @@ -9,9 +9,9 @@ if(NOT TARGET cmvr_es::quic_test_gateway) endif() if(NOT TARGET cmvr_es::quic_edge_service OR - NOT TARGET cmvr_es::media_source_hub) + NOT TARGET cmvr_es::media_source_manager) message(FATAL_ERROR - "Real QUIC E2E requires the production QUIC service and MediaSourceHub") + "Real QUIC E2E requires the production QUIC service and MediaSourceManager") endif() add_executable(cmvr_quic_msquic_e2e_test @@ -22,7 +22,7 @@ target_link_libraries(cmvr_quic_msquic_e2e_test PRIVATE cmvr_es::quic_test_gateway cmvr_es::quic_edge_service - cmvr_es::media_source_hub + cmvr_es::media_source_manager ) if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") diff --git a/test/e2e/README.md b/test/e2e/README.md index e0e4e7ba..e88e8e84 100644 --- a/test/e2e/README.md +++ b/test/e2e/README.md @@ -11,7 +11,7 @@ fake transport,也不要求连接物理设备。 | `cmvr_quic_msquic_e2e_test` | 测试进程内同时运行 Gateway 和生产 `QuicEdgeService` | TLS/ALPN、注册、DeviceManager 合成快照、至少两次心跳 ACK、H.264/AAC descriptor 精确字段、真实 DATAGRAM、分片、序列号、flags、长度与载荷哈希 | | `cmvr_es_quic_process_smoke_test` | 分别启动测试 Gateway 和真实 `cmvr_es` 子进程 | 临时配置加载、`QuicEdgeTask` 工厂和生命周期、节点注册、IP、禁用设备过滤、已启用设备创建失败上报、本地心跳周期、至少两次心跳 ACK、SIGTERM 安全退出 | -第一项向生产 `MediaSourceHub` 注册两个有界 synthetic source: +第一项向生产 `MediaSourceManager` 注册两个有界 synthetic source: - 2500 字节的 H.264 Annex B IDR 视频帧,用于覆盖 DATAGRAM 分片; - 带 ADTS header 的 AAC-LC 48 kHz 双声道音频帧。 diff --git a/test/e2e/quic_msquic_e2e_test.cpp b/test/e2e/quic_msquic_e2e_test.cpp index daf9ec50..c967dcec 100644 --- a/test/e2e/quic_msquic_e2e_test.cpp +++ b/test/e2e/quic_msquic_e2e_test.cpp @@ -15,7 +15,7 @@ #include #include "common/media/media_frame.h" -#include "manager/media_source_hub/include/media_source_hub.h" +#include "manager/media_source_manager/include/media_source_manager.h" #include "service/quic_edge/include/quic_edge_service.h" #include "service/quic_edge/include/quic_transport.h" @@ -26,7 +26,7 @@ using cmvr::media::Codec; using cmvr::media::MediaFrame; using cmvr::media::MediaFramePtr; using cmvr::media::MediaKind; -using cmvr::media::MediaSourceHub; +using cmvr::media::MediaSourceManager; using cmvr::media::PayloadFormat; using cmvr::media::TrackDescriptor; using cmvr::media::TrackDescriptorPtr; @@ -171,12 +171,12 @@ public: { } - MediaSourceHub::SourceCallbacks callbacks(const bool video) + MediaSourceManager::SourceCallbacks callbacks(const bool video) { - MediaSourceHub::SourceCallbacks callbacks; + MediaSourceManager::SourceCallbacks callbacks; callbacks.start = [this]( - const MediaSourceHub::FrameSink& sink, - const MediaSourceHub::CancelPredicate& cancelled) { + const MediaSourceManager::FrameSink& sink, + const MediaSourceManager::CancelPredicate& cancelled) { if (!sink || (cancelled && cancelled())) return false; std::lock_guard lock(mutex_); sink_ = sink; @@ -203,7 +203,7 @@ public: const bool key_frame, const bool discontinuity = false) { - MediaSourceHub::FrameSink sink; + MediaSourceManager::FrameSink sink; { std::lock_guard lock(mutex_); if (!running_ || !sink_) return false; @@ -234,7 +234,7 @@ public: private: TrackDescriptorPtr descriptor_; mutable std::mutex mutex_; - MediaSourceHub::FrameSink sink_; + MediaSourceManager::FrameSink sink_; bool running_{false}; std::uint64_t key_frame_requests_{0U}; }; @@ -443,12 +443,12 @@ int run(const Arguments& arguments) const TrackDescriptorPtr audio_descriptor = makeAudioDescriptor(); SyntheticSource video(video_descriptor); SyntheticSource audio(audio_descriptor); - MediaSourceHub hub; + MediaSourceManager hub; if (!hub.registerSource( video_descriptor, video.callbacks(true), 8U) || !hub.registerSource( audio_descriptor, audio.callbacks(false), 8U)) { - std::cerr << "failed to register synthetic MediaSourceHub tracks\n"; + std::cerr << "failed to register synthetic MediaSourceManager tracks\n"; return 1; } diff --git a/test/quic_gateway/README.md b/test/quic_gateway/README.md index fbcdc294..713cc054 100644 --- a/test/quic_gateway/README.md +++ b/test/quic_gateway/README.md @@ -287,7 +287,7 @@ frames_completed >= 1 关闭全部设备时,实际 `output/bin/cmvr_es` 可以完整验证 TLS、ALPN、控制 stream、 注册、IP 上报、心跳和重连,但不会产生音视频。 -要在无硬件环境验证媒体 DATAGRAM,测试侧还需要 synthetic MediaSourceHub producer +要在无硬件环境验证媒体 DATAGRAM,测试侧还需要 synthetic MediaSourceManager producer 或测试专用 fake camera/microphone。该 Gateway 已具备媒体接收和重组能力,但不会 伪造 Edge 发出的媒体。