#pragma once #include "resource.h" #include "LangManager.h" #include #include #include // 前向声明 struct DllInfo; // 触发器类型 enum TriggerType { TRIGGER_HOST_ONLINE = 0, // 主机上线 // 后续可扩展更多类型 }; // 触发器配置 struct TriggerConfig { TriggerType Type; // 触发类型 std::vector PluginNames; // 要执行的插件名称列表 TriggerConfig() : Type(TRIGGER_HOST_ONLINE) {} }; // 触发器管理器(单例,线程安全,缓存配置) class TriggerManager { public: static TriggerManager& Instance() { static TriggerManager instance; return instance; } // 获取主机上线触发器的插件名称集合(高性能查询) std::set 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 m_OnlinePlugins; // 缓存的上线触发器插件名称 bool m_bLoaded; }; // 触发器设置对话框 class CTriggerSettingsDlg : public CDialogLangEx { public: CTriggerSettingsDlg(std::vector& dllList, CWnd* pParent = nullptr); virtual ~CTriggerSettingsDlg(); enum { IDD = IDD_DIALOG_TRIGGER_SETTINGS }; // 静态方法:加载触发器配置 static std::vector LoadTriggerConfigs(); // 静态方法:保存触发器配置 static void SaveTriggerConfigs(const std::vector& configs); // 静态方法:获取配置文件路径 static std::string GetTriggerConfigPath(); // 静态方法:获取主机上线触发器(如果存在) static TriggerConfig* GetOnlineTrigger(std::vector& 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& m_DllList; // 引用主对话框的 DLL 列表 std::vector m_Configs; // 触发器配置列表 // 控件变量 CComboBox m_comboTriggerType; CListCtrl m_listPlugins; CListCtrl m_listTriggers; };