GrabBag/AppUtils/AppCommon/Inc/ConfigMonitor.h

185 lines
4.7 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