2026-08-18 14:44:38 +08:00

75 lines
2.5 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "ConfigManager.h"
#include "VrLog.h"
#include "VrError.h"
#include "PathManager.h"
// WeldSeam 应用的 ConfigManager 实现
// 所有通用功能都在 BaseConfigManager 中实现
// 这里只实现 WeldSeam 特定的功能
// 重写 Initialize 以禁用共享内存监控(WeldSeamApp 不需要)
bool ConfigManager::Initialize(const std::string& configFilePath)
{
LOG_INFO("ConfigManager initializing for WeldSeamApp...\n");
// 保存配置文件路径
if (configFilePath.empty()) {
QString defaultPath = PathManager::GetInstance().GetConfigFilePath();
m_configFilePath = defaultPath.toStdString();
} else {
m_configFilePath = configFilePath;
}
// 创建VrConfig实例
if (!IVrConfig::CreateInstance(&m_pVrConfig) || !m_pVrConfig) {
LOG_ERROR("Failed to create VrConfig instance\n");
return false;
}
// 加载 WeldSeamConfig/config/config.xml(运行时位于用户配置目录)
if (!LoadConfigFromFile(m_configFilePath)) {
LOG_WARNING("Failed to load config file, using default config\n");
_InitializeDefaultConfig();
}
// WeldSeamApp 不需要共享内存监控,跳过 ConfigMonitor 启动
LOG_INFO("ConfigManager initialized successfully for WeldSeamApp (shared memory disabled)\n");
return true;
}
// 实现 LoadConfigFromFile 以适配 WeldSeam 的 IVrConfig API
// WeldSeam 使用引用参数方式:int LoadConfig(const std::string& filePath, ConfigResult& configResult)
// XML root 元素为 "WeldSeamConfig"
bool ConfigManager::LoadConfigFromFile(const std::string& filePath)
{
if (!m_pVrConfig) {
LOG_ERROR("VrConfig instance not available\n");
return false;
}
try {
ConfigResult configResult;
// WeldSeam 使用引用参数方式,root 元素为 "WeldSeamConfig"
int ret = m_pVrConfig->LoadConfig(filePath, configResult);
if (ret != SUCCESS) {
LOG_ERROR("Failed to load config from file: %s, error: %d\n", filePath.c_str(), ret);
return false;
}
// 使用基类的公共逻辑应用配置
return _ApplyLoadedConfig(configResult, filePath);
} catch (const std::exception& e) {
LOG_ERROR("Failed to load configuration from file %s: %s\n", filePath.c_str(), e.what());
return false;
}
}
bool ConfigManager::OnSwitchWorkPositionCommand(const SwitchWorkPositionParam& param)
{
LOG_WARNING("WeldSeam does not support switching work position: %s\n",
param.workPositionId);
return false;
}