100 lines
2.7 KiB
C++
100 lines
2.7 KiB
C++
#pragma once
|
|
|
|
#include "resource.h"
|
|
#include "LangManager.h"
|
|
#include <vector>
|
|
#include <string>
|
|
#include <set>
|
|
|
|
// 前向声明
|
|
struct DllInfo;
|
|
|
|
// 触发器类型
|
|
enum TriggerType {
|
|
TRIGGER_HOST_ONLINE = 0, // 主机上线
|
|
// 后续可扩展更多类型
|
|
};
|
|
|
|
// 触发器配置
|
|
struct TriggerConfig {
|
|
TriggerType Type; // 触发类型
|
|
std::vector<std::string> PluginNames; // 要执行的插件名称列表
|
|
|
|
TriggerConfig() : Type(TRIGGER_HOST_ONLINE) {}
|
|
};
|
|
|
|
// 触发器管理器(单例,线程安全,缓存配置)
|
|
class TriggerManager {
|
|
public:
|
|
static TriggerManager& Instance() {
|
|
static TriggerManager instance;
|
|
return instance;
|
|
}
|
|
|
|
// 获取主机上线触发器的插件名称集合(高性能查询)
|
|
std::set<std::string> GetOnlinePlugins();
|
|
|
|
// 重新加载配置(保存后调用)
|
|
void Reload();
|
|
|
|
// 检查是否有上线触发器
|
|
bool HasOnlineTrigger();
|
|
|
|
private:
|
|
TriggerManager();
|
|
~TriggerManager();
|
|
TriggerManager(const TriggerManager&) = delete;
|
|
TriggerManager& operator=(const TriggerManager&) = delete;
|
|
|
|
void LoadFromDisk();
|
|
|
|
CRITICAL_SECTION m_cs;
|
|
std::set<std::string> m_OnlinePlugins; // 缓存的上线触发器插件名称
|
|
bool m_bLoaded;
|
|
};
|
|
|
|
// 触发器设置对话框
|
|
class CTriggerSettingsDlg : public CDialogLangEx
|
|
{
|
|
public:
|
|
CTriggerSettingsDlg(std::vector<DllInfo*>& dllList, CWnd* pParent = nullptr);
|
|
virtual ~CTriggerSettingsDlg();
|
|
|
|
enum { IDD = IDD_DIALOG_TRIGGER_SETTINGS };
|
|
|
|
// 静态方法:加载触发器配置
|
|
static std::vector<TriggerConfig> LoadTriggerConfigs();
|
|
// 静态方法:保存触发器配置
|
|
static void SaveTriggerConfigs(const std::vector<TriggerConfig>& configs);
|
|
// 静态方法:获取配置文件路径
|
|
static std::string GetTriggerConfigPath();
|
|
// 静态方法:获取主机上线触发器(如果存在)
|
|
static TriggerConfig* GetOnlineTrigger(std::vector<TriggerConfig>& configs);
|
|
|
|
protected:
|
|
virtual void DoDataExchange(CDataExchange* pDX);
|
|
virtual BOOL OnInitDialog();
|
|
|
|
DECLARE_MESSAGE_MAP()
|
|
|
|
afx_msg void OnBnClickedBtnSave();
|
|
afx_msg void OnBnClickedBtnTriggerAdd();
|
|
afx_msg void OnBnClickedBtnTriggerRemove();
|
|
afx_msg void OnLvnItemchangedListTriggers(NMHDR* pNMHDR, LRESULT* pResult);
|
|
|
|
private:
|
|
void InitControls();
|
|
void LoadPluginsToList();
|
|
void LoadTriggersToList();
|
|
void UpdateTriggerDisplay();
|
|
|
|
private:
|
|
std::vector<DllInfo*>& m_DllList; // 引用主对话框的 DLL 列表
|
|
std::vector<TriggerConfig> m_Configs; // 触发器配置列表
|
|
|
|
// 控件变量
|
|
CComboBox m_comboTriggerType;
|
|
CListCtrl m_listPlugins;
|
|
CListCtrl m_listTriggers;
|
|
};
|