XNSim/Release/include/XNCore/XNModelObject.h

236 lines
7.6 KiB
C
Raw Normal View History

2025-04-28 12:25:20 +08:00
/**
* @file XNModelObject.h
* @author jinchao
* @brief
* @version 1.0
* @date 2024-11-07
*
* @copyright Copyright (c) 2024 XN
*
*/
#pragma once
#include "XNObject.h"
#include "XNEventManager.h"
class XNModelObjectPrivate;
/**
* @brief
* @details
*/
class XNModelObject : public XNObject
{
Q_OBJECT
Q_DISABLE_COPY(XNModelObject)
Q_DECLARE_PRIVATE(XNModelObject)
Q_PROPERTY(QString description READ GetDescription WRITE SetDescription)
Q_PROPERTY(QString author READ GetAuthor WRITE SetAuthor)
Q_PROPERTY(QString xmlPath READ GetXmlPath WRITE SetXmlPath)
Q_PROPERTY(QDateTime createTime READ GetCreateTime WRITE SetCreateTime)
Q_PROPERTY(QDateTime changeTime READ GetChangeTime WRITE SetChangeTime)
Q_PROPERTY(QString version READ GetVersion WRITE SetVersion)
public:
/**
* @brief
*/
XNModelObject(QObject *parent = nullptr);
/**
* @brief
*/
virtual ~XNModelObject();
protected:
/**
* @brief
* @param dd:XNModelObjectPrivate类型
* @param parent:QObject类型
* @details
*/
XNModelObject(XNModelObjectPrivate &dd, QObject *parent = nullptr);
public:
/**
* @brief
* @return const QString&:
*/
const QString &GetDescription();
/**
* @brief
* @param sDescription:QString类型
*/
void SetDescription(const QString &sDescription);
/**
* @brief
* @return const QString&:
*/
const QString &GetAuthor();
/**
* @brief
* @param sAuthor: QString类型
*/
void SetAuthor(const QString &sAuthor);
/**
* @brief
* @return const QString&:
*/
const QString &GetXmlPath();
/**
* @brief
* @param sXmlPath:QString类型
*/
void SetXmlPath(const QString &sXmlPath);
/**
* @brief
* @return const QDateTime&:
*/
const QDateTime &GetCreateTime();
/**
* @brief
* @param cTime: QDateTime类型
*/
void SetCreateTime(const QDateTime &cTime);
/**
* @brief
* @return const QDateTime&:
*/
const QDateTime &GetChangeTime();
/**
* @brief
* @param cTime: QDateTime类型
*/
void SetChangeTime(const QDateTime &cTime);
/**
* @brief
* @return const XNString&:
*/
const QString &GetVersion();
/**
* @brief
* @param sVersion: QString类型
*/
void SetVersion(const QString &sVersion);
/**
* @brief 仿
* @param dBaseFreq: double类型Hz
*/
void SetBaseFreq(const double &dBaseFreq);
/**
* @brief
* @details
*/
virtual void StepUpdate();
/**
* @brief
* @param eventName:
* @param callback:
* @param async:
* @return: ID-1
*/
int RegisterEventHandler(const QString &eventName,
std::function<void(const QVariant &)> callback, bool async = false,
XNEvent::Priority priority = XNEvent::Priority::Normal);
/**
* @brief
* @param eventName:
* @param eventData:
* @param forceAsync:
*/
void TriggerEvent(const QString &eventName, const QVariant &eventData = QVariant(),
bool forceAsync = false,
XNEvent::Priority priority = XNEvent::Priority::Normal);
/**
* @brief
* @param eventName:
* @param callback:
* @return: ID-1
*/
int RegisterRTEventHandler(const QString &eventName,
std::function<void(const QVariant &)> callback)
{
return RegisterEventHandler(eventName, callback, true, XNEvent::Priority::RealTime);
}
/**
* @brief
* @param eventName:
* @param eventData:
*/
void TriggerRTEvent(const QString &eventName, const QVariant &eventData = QVariant())
{
TriggerEvent(eventName, eventData, true, XNEvent::Priority::RealTime);
}
signals:
/**
* @brief
* @param id: quint32类型ID
* @param fun: QFunctionPointer类型
* @param freqGroup:UINT32类型0121/431/841/1651/32
* @param RunPos: UINT32类型<2^(freqGroup)
* @param RunPriorty:INT32类型990
* @details 线
*/
void RegisterFunction(quint32 id, XNCallBack fun, quint32 freqGroup, quint32 RunPos,
quint32 RunPriorty);
public slots:
/**
* @brief
* @details
* 使AddMyFunction方法注册需要被线程调用的函数
*/
virtual void OnInitialize();
/**
* @brief 仿
* @details
*/
virtual void OnPrepareForExecute();
public:
virtual void RegisterDDSParticipant();
};
#define XN_DECLARE_DDS() \
public: \
virtual void RegisterDDSParticipant() override;
#define XN_REGISTER_PARTICIPANT_BEGIN(class) \
void class ::RegisterDDSParticipant() \
{ \
XNModelObject::RegisterDDSParticipant(); \
Q_D(class); \
XNModelManager *modelManager = qobject_cast<XNModelManager *>(parent()); \
if (modelManager == nullptr) \
return; \
XNDDSManager *ddsManager = modelManager->parent()->findChild<XNDDSManager *>(); \
if (ddsManager == nullptr) \
return; \
quint32 MyID = getUniqueId();
#define XN_PUBLISHTOPIC(topic) \
d->_dataWriters[#topic] = ddsManager->RegisterPublisher<topic##PubSubType>(#topic, MyID);
#define XN_SUBSCRIBETOPIC(topic, fun) \
ddsManager->RegisterSubscriber<topic##PubSubType>( \
#topic, MyID, std::bind(fun, this, std::placeholders::_1));
#define XN_REGISTER_PARTICIPANT_END(class) }