Feature: Implement trigger logic for host online event
This commit is contained in:
99
server/2015Remote/TriggerSettingsDlg.h
Normal file
99
server/2015Remote/TriggerSettingsDlg.h
Normal file
@@ -0,0 +1,99 @@
|
||||
#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;
|
||||
};
|
||||
Reference in New Issue
Block a user