GrabBag/AppUtils/AppConfig/Inc/ConfigMonitor.h

185 lines
4.5 KiB
C
Raw Normal View History

#ifndef CONFIGMONITOR_H
#define CONFIGMONITOR_H
#include <atomic>
#include <thread>
#include <mutex>
#include <memory>
#include <functional>
#include "IVrShareMem.h"
#include "VrConfigCmd.h"
/**
* @brief 配置命令处理器接口
*
* 应用程序需要实现此接口来处理从共享内存接收到的配置命令
*/
class IConfigCommandHandler
{
public:
virtual ~IConfigCommandHandler() = default;
/**
* @brief 处理相机曝光设置命令
* @param param 相机配置参数
* @return true: 成功, false: 失败
*/
virtual bool OnCameraExposeCommand(const CameraConfigParam& param) = 0;
/**
* @brief 处理相机增益设置命令
* @param param 相机配置参数
* @return true: 成功, false: 失败
*/
virtual bool OnCameraGainCommand(const CameraConfigParam& param) = 0;
/**
* @brief 处理相机帧率设置命令
* @param param 相机配置参数
* @return true: 成功, false: 失败
*/
virtual bool OnCameraFrameRateCommand(const CameraConfigParam& param) = 0;
/**
* @brief 处理相机摆动参数设置命令
* @param param 摆动配置参数
* @return true: 成功, false: 失败
*/
virtual bool OnCameraSwingCommand(const SwingConfigParam& param) = 0;
/**
* @brief 处理算法参数设置命令
* @param param 算法配置参数
* @return true: 成功, false: 失败
*/
virtual bool OnAlgoParamCommand(const AlgoConfigParam& param) = 0;
/**
* @brief 处理标定参数设置命令
* @param param 标定配置参数
* @return true: 成功, false: 失败
*/
virtual bool OnCalibParamCommand(const CalibConfigParam& param) = 0;
/**
* @brief 处理完整配置更新命令
* @param param 完整配置参数
* @return true: 成功, false: 失败
*/
virtual bool OnFullConfigCommand(const FullConfigParam& param) = 0;
/**
* @brief 处理工作点切换命令
* @param param 工作点切换参数
* @return true: 成功, false: 失败
*/
virtual bool OnSwitchWorkPositionCommand(const SwitchWorkPositionParam& param) {
// 默认空实现,子类可选择重写
return true;
}
/**
* @brief 处理包裹类型切换命令
* @param param 包裹类型切换参数
* @return true: 成功, false: 失败
*/
virtual bool OnSwitchPackageTypeCommand(const SwitchPackageTypeParam& param) {
// 默认空实现,子类可选择重写
return true;
}
};
/**
* @brief 配置监控器类
*
* 负责监控共享内存中的配置命令,并分发给注册的处理器
*
* 使用方法:
* @code
* // 1. 创建监控器实例
* ConfigMonitor monitor;
*
* // 2. 设置命令处理器
* monitor.SetCommandHandler(myHandler);
*
* // 3. 启动监控
* monitor.Start();
*
* // 4. 停止监控
* monitor.Stop();
* @endcode
*/
class ConfigMonitor
{
public:
ConfigMonitor();
~ConfigMonitor();
/**
* @brief 设置配置命令处理器
* @param handler 命令处理器指针
*/
void SetCommandHandler(IConfigCommandHandler* handler);
/**
* @brief 启动共享内存监控
* @param sharedMemName 共享内存名称(默认使用CONFIG_CMD_SHARED_MEM_NAME)
* @return true: 成功, false: 失败
*/
bool Start(const std::string& sharedMemName = CONFIG_CMD_SHARED_MEM_NAME);
/**
* @brief 停止共享内存监控
*/
void Stop();
/**
* @brief 检查监控是否正在运行
* @return true: 运行中, false: 已停止
*/
bool IsRunning() const {
return m_bMonitorRunning;
}
private:
/**
* @brief 共享内存监控线程函数
*/
void MonitorThreadFunc();
/**
* @brief 初始化共享内存
* @param sharedMemName 共享内存名称
* @return true: 成功, false: 失败
*/
bool InitializeSharedMemory(const std::string& sharedMemName);
/**
* @brief 清理共享内存
*/
void CleanupSharedMemory();
/**
* @brief 应用配置命令
* @param configData 配置命令数据
* @return true: 成功, false: 失败
*/
bool ApplyConfigCommand(const ConfigCmdData& configData);
private:
// 共享内存实例
IVrShareMem* m_pShareMem;
// 命令处理器
IConfigCommandHandler* m_pCommandHandler;
// 监控线程
std::atomic<bool> m_bMonitorRunning;
std::thread m_monitorThread;
// 共享内存名称
std::string m_sharedMemName;
};
#endif // CONFIGMONITOR_H