91 lines
3.9 KiB
C++
91 lines
3.9 KiB
C++
#pragma once
|
|
|
|
#include "XNObject.h"
|
|
#include "XNServiceManager.h"
|
|
#include "XNEventManager.h"
|
|
struct XNServiceObjectPrivate;
|
|
|
|
class XNServiceObject : public XNObject
|
|
{
|
|
XN_METATYPE(XNServiceObject, XNObject)
|
|
XN_DECLARE_PRIVATE(XNServiceObject)
|
|
public:
|
|
XNServiceObject();
|
|
virtual ~XNServiceObject();
|
|
|
|
protected:
|
|
XNServiceObject(PrivateType *p);
|
|
|
|
public:
|
|
const std::string &GetVersion();
|
|
const std::string &GetDescription();
|
|
const std::string &GetAuthor();
|
|
const std::string &GetXmlPath();
|
|
const XNTimePoint &GetCreateTime();
|
|
const XNTimePoint &GetChangeTime();
|
|
|
|
void SetVersion(const std::string &version);
|
|
void SetDescription(const std::string &description);
|
|
void SetAuthor(const std::string &author);
|
|
void SetXmlPath(const std::string &xmlPath);
|
|
void SetCreateTime(const XNTimePoint &createTime);
|
|
void SetChangeTime(const XNTimePoint &changeTime);
|
|
|
|
int RegisterEventHandler(const std::string &eventName, XNEventCallback callback,
|
|
bool async = false,
|
|
XNEvent::Priority priority = XNEvent::Priority::Normal);
|
|
|
|
void TriggerEvent(const std::string &eventName, const std::any &eventData = std::any(),
|
|
bool forceAsync = false,
|
|
XNEvent::Priority priority = XNEvent::Priority::Normal);
|
|
|
|
int RegisterRTEventHandler(const std::string &eventName, XNEventCallback callback);
|
|
|
|
void TriggerRTEvent(const std::string &eventName, const std::any &eventData = std::any());
|
|
|
|
virtual void Initialize(uint32_t initialType);
|
|
virtual void PrepareForExecute();
|
|
|
|
virtual void RegisterDDSParticipant();
|
|
|
|
void SetFramework(XNFrameworkPtr framework);
|
|
|
|
protected:
|
|
XNFrameworkPtr GetFramework() const;
|
|
};
|
|
|
|
XNCLASS_PTR_DECLARE(XNServiceObject)
|
|
|
|
#define XN_DECLARE_DDS_SERVICE() \
|
|
public: \
|
|
virtual void RegisterDDSParticipant() override;
|
|
|
|
#define XN_REGISTER_SERVICE_BEGIN_SERVICE(class) \
|
|
void class ::RegisterDDSParticipant() \
|
|
{ \
|
|
XNServiceObject::RegisterDDSParticipant(); \
|
|
Q_D(class); \
|
|
auto framework = GetFramework(); \
|
|
if (!framework) \
|
|
return; \
|
|
XNDDSManagerPtr ddsManager = framework->GetDDSManager(); \
|
|
if (!ddsManager) \
|
|
return; \
|
|
quint32 MyID = getUniqueId();
|
|
|
|
#define XN_PUBLISHTOPIC_SERVICE(topic) \
|
|
d->_dataWriters[#topic] = ddsManager->RegisterPublisher<topic##PubSubType>(#topic, MyID);
|
|
|
|
#define XN_SUBSCRIBETOPIC_SERVICE(topic, fun) \
|
|
ddsManager->RegisterSubscriber<topic##PubSubType>( \
|
|
#topic, MyID, std::bind(fun, this, std::placeholders::_1));
|
|
|
|
#define XN_REGISTER_SERVICE_END_SERVICE(class) }
|
|
|
|
#define XN_SERVICE_INITIALIZE(ClassName) \
|
|
extern "C" XNServiceObjectPtr Initial##ClassName() \
|
|
{ \
|
|
ClassNamePtr obj = std::make_shared<ClassName>(); \
|
|
return obj; \
|
|
}
|