XNSim/XNCore_Win/XNModelObject/XNModelObject.h

268 lines
6.7 KiB
C
Raw Normal View History

2025-07-19 12:44:06 +08:00
/**
* @file XNModelObject.h
* @author jinchao
* @brief
* @version 1.0
* @date 2024-11-07
*
* @copyright Copyright (c) 2024 XN
*
*/
#pragma once
#include "XNEventManager/XNEventManager.h"
#include "XNObject/XNObject.h"
namespace XNSim {
struct XNModelObjectPrivate;
/**
* @brief
* @details
*/
class XNModelObject : public XNObject {
XN_METATYPE(XNModelObject, XNObject)
XN_DECLARE_PRIVATE(XNModelObject)
public:
/**
* @brief
*/
XNModelObject();
/**
* @brief
*/
virtual ~XNModelObject();
protected:
/**
* @brief
* @param p:XNModelObjectPrivate类型
* @details
*/
XNModelObject(PrivateType *p);
public:
void SetFramework(XNFrameworkPtr framework);
protected:
XNFrameworkPtr GetFramework() const;
public:
/**
* @brief
* @return const QString&:
*/
const XN_STRING &GetDescription();
/**
* @brief
* @param sDescription:QString类型
*/
void SetDescription(const XN_STRING &sDescription);
/**
* @brief
* @return const QString&:
*/
const XN_STRING &GetAuthor();
/**
* @brief
* @param sAuthor: QString类型
*/
void SetAuthor(const XN_STRING &sAuthor);
/**
* @brief
* @return const QString&:
*/
const XN_STRING &GetXmlPath();
/**
* @brief
* @param sXmlPath:QString类型
*/
void SetXmlPath(const XN_STRING &sXmlPath);
/**
* @brief
* @return const XNTimePoint&:
*/
const XNTimePoint &GetCreateTime();
/**
* @brief
* @param cTime: XNTimePoint类型
*/
void SetCreateTime(const XNTimePoint &cTime);
/**
* @brief
* @return const XNTimePoint&:
*/
const XNTimePoint &GetChangeTime();
/**
* @brief
* @param cTime: XNTimePoint类型
*/
void SetChangeTime(const XNTimePoint &cTime);
/**
* @brief
* @return const XNString&:
*/
const XN_STRING &GetVersion();
/**
* @brief
* @param sVersion: std::string类型
*/
void SetVersion(const XN_STRING &sVersion);
/**
* @brief
* @return uint32_t:
*/
XN_UINT32 GetRunFreq() const;
/**
* @brief
* @param runFreq: uint32_t类型
*/
void SetRunFreq(XN_UINT32 runFreq);
/**
* @brief
* @return uint32_t:
*/
XN_UINT32 GetRunNode() const;
/**
* @brief
* @param runNode: uint32_t类型
*/
void SetRunNode(XN_UINT32 runNode);
/**
* @brief
* @return uint32_t:
*/
XN_UINT32 GetRunPriority() const;
/**
* @brief
* @param runPriority: uint32_t类型
*/
void SetRunPriority(XN_UINT32 runPriority);
/**
* @brief
* @return double:
*/
XN_DOUBLE GetSetFreq() const;
/**
* @brief
* @param setFreq: double类型
*/
void SetSetFreq(XN_DOUBLE setFreq);
/**
* @brief
* @return const std::string&:
*/
const XN_STRING &GetLibPath();
/**
* @brief
* @param sLibPath: std::string类型
*/
void SetLibPath(const XN_STRING &sLibPath);
/**
* @brief
* @details
*/
virtual void StepUpdate();
/**
* @brief
* @param eventName:
* @param callback:
* @param async:
* @return: ID-1
*/
int RegisterEventHandler(
const XN_STRING &eventName, XNEventCallback callback,
XN_BOOL async = false,
XNEvent::Priority priority = XNEvent::Priority::Normal);
/**
* @brief
* @param eventName:
* @param eventData:
* @param forceAsync:
*/
void TriggerEvent(const XN_STRING &eventName,
const XN_ANY &eventData = XN_ANY(),
XN_BOOL forceAsync = false,
XNEvent::Priority priority = XNEvent::Priority::Normal);
/**
* @brief
* @param eventName:
* @param callback:
* @return: ID-1
*/
int RegisterRTEventHandler(const XN_STRING &eventName,
XNEventCallback callback) {
return RegisterEventHandler(eventName, callback, true,
XNEvent::Priority::RealTime);
}
/**
* @brief
* @param eventName:
* @param eventData:
*/
void TriggerRTEvent(const XN_STRING &eventName,
const XN_ANY &eventData = XN_ANY()) {
TriggerEvent(eventName, eventData, true, XNEvent::Priority::RealTime);
}
void SetInitializeType(XN_UINT32 initialType);
void SetThreadID(XN_UINT32 threadID);
XN_UINT32 GetThreadID() const;
/**
* @brief
* @details
* 使AddMyFunction方法注册需要被线程调用的函数
*/
virtual void Initialize();
/**
* @brief 仿
* @details
*/
virtual void PrepareForExecute();
public:
virtual void RegisterDDSParticipant();
private:
void ParseXml();
void ParseConfig();
};
} // namespace XNSim
#define XN_MODEL_INITIALIZE(ClassName) \
extern "C" XNSim::XNModelObjectPtr Initial##ClassName() { \
XNSim::ClassName##Ptr obj = std::make_shared<XNSim::ClassName>(); \
return obj; \
}