2025-06-23 10:41:33 +08:00
|
|
|
|
#pragma once
|
|
|
|
|
#include <qwidget.h>
|
|
|
|
|
#include <qmenu.h>
|
|
|
|
|
#include "json.hpp"
|
|
|
|
|
#include "WebEngineView.h"
|
|
|
|
|
class WebEventDispatch;
|
|
|
|
|
class ShareEventModule;
|
|
|
|
|
using json = nlohmann::json;
|
|
|
|
|
/**
|
2025-06-23 18:01:09 +08:00
|
|
|
|
* @brief 消息处理模块
|
2025-06-23 10:41:33 +08:00
|
|
|
|
*/
|
|
|
|
|
class WEBQT_EXPORT EventModule :public QObject
|
|
|
|
|
{
|
|
|
|
|
Q_OBJECT
|
|
|
|
|
public:
|
|
|
|
|
/**
|
2025-06-23 18:01:09 +08:00
|
|
|
|
* @brief 消息处理模块
|
|
|
|
|
* @param name 消息处理模块对应的功能模块名称,需与WEB端定义的功能模块对应。
|
2025-06-23 10:41:33 +08:00
|
|
|
|
*/
|
|
|
|
|
EventModule(std::string name);
|
|
|
|
|
virtual ~EventModule();
|
|
|
|
|
/**
|
2025-06-23 18:01:09 +08:00
|
|
|
|
* @brief 返回功能模块名称
|
|
|
|
|
* @return 功能模块名称
|
2025-06-23 10:41:33 +08:00
|
|
|
|
*/
|
|
|
|
|
const std::string getName();
|
|
|
|
|
/**
|
2025-06-23 18:01:09 +08:00
|
|
|
|
* @brief 发送方法消息到WEB端
|
|
|
|
|
* @param eventName 消息名称
|
|
|
|
|
* @param msg 消息参数
|
2025-06-23 10:41:33 +08:00
|
|
|
|
*/
|
|
|
|
|
void send(const std::string& eventName, const json& msg);
|
|
|
|
|
/**
|
2025-06-23 18:01:09 +08:00
|
|
|
|
* @brief 发送方法消息到WEB端
|
|
|
|
|
* @param eventName 消息名称
|
2025-06-23 10:41:33 +08:00
|
|
|
|
*/
|
|
|
|
|
void send(const std::string& eventName);
|
|
|
|
|
/**
|
2025-06-23 18:01:09 +08:00
|
|
|
|
* @brief 发送方法消息到WEB端
|
|
|
|
|
* @param eventName 消息名称
|
|
|
|
|
* @param msg 模板化的消息参数
|
2025-06-23 10:41:33 +08:00
|
|
|
|
*/
|
|
|
|
|
template<class T>
|
|
|
|
|
void send(const std::string& eventName, T msg) {
|
|
|
|
|
json j;
|
|
|
|
|
j["event"] = eventName;
|
|
|
|
|
j["data"] = msg;
|
|
|
|
|
sentToWeb(j);
|
|
|
|
|
}
|
|
|
|
|
/**
|
2025-06-23 18:01:09 +08:00
|
|
|
|
* @brief 广播方法消息到WEB端
|
|
|
|
|
* @param eventName 消息名称
|
|
|
|
|
* @param msg 消息参数
|
2025-06-23 10:41:33 +08:00
|
|
|
|
*/
|
|
|
|
|
void broadcast(const std::string& eventName, const json& msg);
|
|
|
|
|
/**
|
2025-06-23 18:01:09 +08:00
|
|
|
|
* @brief 广播方法消息到WEB端
|
|
|
|
|
* @param eventName 消息名称
|
2025-06-23 10:41:33 +08:00
|
|
|
|
*/
|
|
|
|
|
void broadcast(const std::string& eventName);
|
|
|
|
|
/**
|
2025-06-23 18:01:09 +08:00
|
|
|
|
* @brief 广播方法消息到WEB端
|
|
|
|
|
* @param eventName 消息名称
|
|
|
|
|
* @param msg 模板化的消息参数
|
2025-06-23 10:41:33 +08:00
|
|
|
|
*/
|
|
|
|
|
template<class T>
|
|
|
|
|
void broadcast(const std::string& eventName, T msg) {
|
|
|
|
|
json j;
|
|
|
|
|
j["event"] = eventName;
|
|
|
|
|
j["data"] = msg;
|
|
|
|
|
broadcastToWeb(j);
|
|
|
|
|
}
|
|
|
|
|
/**
|
2025-06-23 18:01:09 +08:00
|
|
|
|
* @brief 为本模块增加共享事件处理模块
|
|
|
|
|
* @param shareEventModule 共享事件处理模块
|
2025-06-23 10:41:33 +08:00
|
|
|
|
*/
|
|
|
|
|
void addShareEventModule(ShareEventModule* shareEventModule);
|
|
|
|
|
/**
|
2025-06-23 18:01:09 +08:00
|
|
|
|
* @brief 右键菜单消息处理回调函数
|
|
|
|
|
* @param request 参数信息
|
|
|
|
|
* @param menu 可供操作的菜单对象
|
2025-06-23 10:41:33 +08:00
|
|
|
|
*/
|
|
|
|
|
virtual void contextMenu(const json& request, QMenu* menu);
|
|
|
|
|
/**
|
2025-06-23 18:01:09 +08:00
|
|
|
|
* @brief 通用消息处理回调函数
|
|
|
|
|
* @param eventName 事件名称
|
|
|
|
|
* @param parameter 参数信息,包含输入参数和返回参数。
|
|
|
|
|
* @return 如果成功处理则返回true,如果没有处理该消息则返回false
|
2025-06-23 10:41:33 +08:00
|
|
|
|
*/
|
|
|
|
|
virtual bool onMessage(const std::string& eventName, json& parameter);
|
|
|
|
|
private:
|
|
|
|
|
void sentToWeb(json& msg);
|
|
|
|
|
void broadcastToWeb(json& msg);
|
|
|
|
|
|
|
|
|
|
std::list<ShareEventModule*> _shareEventModule;
|
|
|
|
|
std::string _name;
|
|
|
|
|
WebEventDispatch* _parent;
|
|
|
|
|
friend class WebEventDispatch;
|
|
|
|
|
};
|
|
|
|
|
/**
|
2025-06-23 18:01:09 +08:00
|
|
|
|
* @brief 共享事件处理函数
|
2025-06-23 10:41:33 +08:00
|
|
|
|
*/
|
|
|
|
|
class WEBQT_EXPORT ShareEventModule :public EventModule {
|
|
|
|
|
Q_OBJECT
|
|
|
|
|
public:
|
|
|
|
|
ShareEventModule();
|
|
|
|
|
virtual ~ShareEventModule();
|
|
|
|
|
private:
|
|
|
|
|
void detach();
|
|
|
|
|
int _ref;
|
|
|
|
|
friend class EventModule;
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
/**
|
|
|
|
|
* @brief
|
|
|
|
|
*/
|
|
|
|
|
class WEBQT_EXPORT SignalEventModule :public EventModule {
|
|
|
|
|
Q_OBJECT
|
|
|
|
|
public:
|
|
|
|
|
SignalEventModule(std::string name);
|
|
|
|
|
virtual ~SignalEventModule();
|
|
|
|
|
signals:
|
|
|
|
|
bool onmessage(const std::string&, json&);
|
|
|
|
|
protected:
|
|
|
|
|
bool onMessage(const std::string& eventName, json& parameter);
|
|
|
|
|
};
|