93 lines
3.8 KiB
C++
93 lines
3.8 KiB
C++
#pragma once
|
|
|
|
#include "XNObject.h"
|
|
#include "XNServiceManager.h"
|
|
#include "XNEventManager.h"
|
|
|
|
class XNServiceObjectPrivate;
|
|
|
|
class XNServiceObject : public XNObject
|
|
{
|
|
Q_OBJECT
|
|
Q_DECLARE_PRIVATE(XNServiceObject)
|
|
Q_DISABLE_COPY(XNServiceObject)
|
|
|
|
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:
|
|
explicit XNServiceObject(QObject *parent = nullptr);
|
|
virtual ~XNServiceObject();
|
|
|
|
protected:
|
|
explicit XNServiceObject(XNServiceObjectPrivate &dd, QObject *parent = nullptr);
|
|
|
|
public:
|
|
const QString &GetVersion();
|
|
const QString &GetDescription();
|
|
const QString &GetAuthor();
|
|
const QString &GetXmlPath();
|
|
const QDateTime &GetCreateTime();
|
|
const QDateTime &GetChangeTime();
|
|
|
|
void SetVersion(const QString &version);
|
|
void SetDescription(const QString &description);
|
|
void SetAuthor(const QString &author);
|
|
void SetXmlPath(const QString &xmlPath);
|
|
void SetCreateTime(const QDateTime &createTime);
|
|
void SetChangeTime(const QDateTime &changeTime);
|
|
|
|
int RegisterEventHandler(const QString &eventName,
|
|
std::function<void(const QVariant &)> callback, bool async = false,
|
|
XNEvent::Priority priority = XNEvent::Priority::Normal);
|
|
|
|
void TriggerEvent(const QString &eventName, const QVariant &eventData = QVariant(),
|
|
bool forceAsync = false,
|
|
XNEvent::Priority priority = XNEvent::Priority::Normal);
|
|
|
|
int RegisterRTEventHandler(const QString &eventName,
|
|
std::function<void(const QVariant &)> callback);
|
|
|
|
void TriggerRTEvent(const QString &eventName, const QVariant &eventData = QVariant());
|
|
|
|
public slots:
|
|
virtual void OnInitialize();
|
|
virtual void OnPrepareForExecute();
|
|
|
|
public:
|
|
virtual void RegisterDDSParticipant();
|
|
|
|
private:
|
|
XNEventManager *GetEventManager() const;
|
|
};
|
|
|
|
#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); \
|
|
XNServiceManager *serviceManager = qobject_cast<XNServiceManager *>(parent()); \
|
|
if (serviceManager == nullptr) \
|
|
return; \
|
|
XNDDSManager *ddsManager = serviceManager->parent()->findChild<XNDDSManager *>(); \
|
|
if (ddsManager == nullptr) \
|
|
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) }
|