XNSim/Release/include/XNCore/XNModelObject.h

253 lines
6.2 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"
2025-05-20 15:39:40 +08:00
struct XNModelObjectPrivate;
2025-04-28 12:25:20 +08:00
/**
* @brief
* @details
*/
class XNModelObject : public XNObject
{
2025-05-20 15:39:40 +08:00
XN_METATYPE(XNModelObject, XNObject)
XN_DECLARE_PRIVATE(XNModelObject)
2025-04-28 12:25:20 +08:00
public:
/**
* @brief
*/
2025-05-20 15:39:40 +08:00
XNModelObject();
2025-04-28 12:25:20 +08:00
/**
* @brief
*/
virtual ~XNModelObject();
protected:
/**
* @brief
2025-05-20 15:39:40 +08:00
* @param p:XNModelObjectPrivate类型
2025-04-28 12:25:20 +08:00
* @details
*/
2025-05-20 15:39:40 +08:00
XNModelObject(PrivateType *p);
public:
void SetFramework(XNFrameworkPtr framework);
protected:
XNFrameworkPtr GetFramework() const;
2025-04-28 12:25:20 +08:00
public:
/**
* @brief
* @return const QString&:
*/
2025-05-20 15:39:40 +08:00
const std::string &GetDescription();
2025-04-28 12:25:20 +08:00
/**
* @brief
* @param sDescription:QString类型
*/
2025-05-20 15:39:40 +08:00
void SetDescription(const std::string &sDescription);
2025-04-28 12:25:20 +08:00
/**
* @brief
* @return const QString&:
*/
2025-05-20 15:39:40 +08:00
const std::string &GetAuthor();
2025-04-28 12:25:20 +08:00
/**
* @brief
* @param sAuthor: QString类型
*/
2025-05-20 15:39:40 +08:00
void SetAuthor(const std::string &sAuthor);
2025-04-28 12:25:20 +08:00
/**
* @brief
* @return const QString&:
*/
2025-05-20 15:39:40 +08:00
const std::string &GetXmlPath();
2025-04-28 12:25:20 +08:00
/**
* @brief
* @param sXmlPath:QString类型
*/
2025-05-20 15:39:40 +08:00
void SetXmlPath(const std::string &sXmlPath);
2025-04-28 12:25:20 +08:00
/**
* @brief
2025-05-20 15:39:40 +08:00
* @return const XNTimePoint&:
2025-04-28 12:25:20 +08:00
*/
2025-05-20 15:39:40 +08:00
const XNTimePoint &GetCreateTime();
2025-04-28 12:25:20 +08:00
/**
* @brief
2025-05-20 15:39:40 +08:00
* @param cTime: XNTimePoint类型
2025-04-28 12:25:20 +08:00
*/
2025-05-20 15:39:40 +08:00
void SetCreateTime(const XNTimePoint &cTime);
2025-04-28 12:25:20 +08:00
/**
* @brief
2025-05-20 15:39:40 +08:00
* @return const XNTimePoint&:
2025-04-28 12:25:20 +08:00
*/
2025-05-20 15:39:40 +08:00
const XNTimePoint &GetChangeTime();
2025-04-28 12:25:20 +08:00
/**
* @brief
2025-05-20 15:39:40 +08:00
* @param cTime: XNTimePoint类型
2025-04-28 12:25:20 +08:00
*/
2025-05-20 15:39:40 +08:00
void SetChangeTime(const XNTimePoint &cTime);
2025-04-28 12:25:20 +08:00
/**
* @brief
* @return const XNString&:
*/
2025-05-20 15:39:40 +08:00
const std::string &GetVersion();
2025-04-28 12:25:20 +08:00
/**
2025-05-20 15:39:40 +08:00
* @brief
* @param sVersion: std::string类型
2025-04-28 12:25:20 +08:00
*/
2025-05-20 15:39:40 +08:00
void SetVersion(const std::string &sVersion);
2025-04-28 12:25:20 +08:00
/**
* @brief
* @return uint32_t:
*/
uint32_t GetRunFreq() const;
/**
* @brief
* @param runFreq: uint32_t类型
*/
void SetRunFreq(uint32_t runFreq);
/**
* @brief
* @return uint32_t:
*/
uint32_t GetRunNode() const;
/**
* @brief
* @param runNode: uint32_t类型
*/
void SetRunNode(uint32_t runNode);
/**
* @brief
* @return uint32_t:
*/
uint32_t GetRunPriority() const;
/**
* @brief
* @param runPriority: uint32_t类型
*/
void SetRunPriority(uint32_t runPriority);
/**
* @brief
* @return double:
*/
double GetSetFreq() const;
/**
* @brief
* @param setFreq: double类型
*/
void SetSetFreq(double setFreq);
2025-04-28 12:25:20 +08:00
/**
* @brief
* @details
*/
virtual void StepUpdate();
/**
* @brief
* @param eventName:
* @param callback:
* @param async:
* @return: ID-1
*/
2025-05-20 15:39:40 +08:00
int RegisterEventHandler(const std::string &eventName, XNEventCallback callback,
bool async = false,
2025-04-28 12:25:20 +08:00
XNEvent::Priority priority = XNEvent::Priority::Normal);
/**
* @brief
* @param eventName:
* @param eventData:
* @param forceAsync:
*/
2025-05-20 15:39:40 +08:00
void TriggerEvent(const std::string &eventName, const std::any &eventData = std::any(),
2025-04-28 12:25:20 +08:00
bool forceAsync = false,
XNEvent::Priority priority = XNEvent::Priority::Normal);
/**
* @brief
* @param eventName:
* @param callback:
* @return: ID-1
*/
2025-05-20 15:39:40 +08:00
int RegisterRTEventHandler(const std::string &eventName, XNEventCallback callback)
2025-04-28 12:25:20 +08:00
{
return RegisterEventHandler(eventName, callback, true, XNEvent::Priority::RealTime);
}
/**
* @brief
* @param eventName:
* @param eventData:
*/
2025-05-20 15:39:40 +08:00
void TriggerRTEvent(const std::string &eventName, const std::any &eventData = std::any())
2025-04-28 12:25:20 +08:00
{
TriggerEvent(eventName, eventData, true, XNEvent::Priority::RealTime);
}
void SetInitializeType(uint32_t initialType);
void SetThreadID(uint32_t threadID);
uint32_t GetThreadID() const;
2025-04-28 12:25:20 +08:00
/**
* @brief
* @details
* 使AddMyFunction方法注册需要被线程调用的函数
*/
virtual void Initialize();
2025-04-28 12:25:20 +08:00
/**
* @brief 仿
* @details
*/
2025-05-20 15:39:40 +08:00
virtual void PrepareForExecute();
2025-04-28 12:25:20 +08:00
public:
virtual void RegisterDDSParticipant();
private:
void ParseXml();
void ParseConfig();
2025-04-28 12:25:20 +08:00
};
2025-05-20 15:39:40 +08:00
#define XN_MODEL_INITIALIZE(ClassName) \
extern "C" XNModelObjectPtr Initial##ClassName() \
{ \
2025-05-21 09:18:30 +08:00
ClassName##Ptr obj = std::make_shared<ClassName>(); \
2025-05-20 15:39:40 +08:00
return obj; \
}