#include "XNServiceObject.h" #include "XNServiceObject_p.h" XNServiceObject::XNServiceObject(QObject *parent) : XNObject(parent) { } XNServiceObject::~XNServiceObject() { } XNServiceObject::XNServiceObject(XNServiceObjectPrivate &dd, QObject *parent) : XNObject(dd, parent) { } const QString &XNServiceObject::GetVersion() { Q_D(XNServiceObject); return d->_sVersion; } const QString &XNServiceObject::GetDescription() { Q_D(XNServiceObject); return d->_sDescription; } const QString &XNServiceObject::GetAuthor() { Q_D(XNServiceObject); return d->_sAuthor; } const QString &XNServiceObject::GetXmlPath() { Q_D(XNServiceObject); return d->_sXmlPath; } const QDateTime &XNServiceObject::GetCreateTime() { Q_D(XNServiceObject); return d->_cCreateTime; } const QDateTime &XNServiceObject::GetChangeTime() { Q_D(XNServiceObject); return d->_cChangeTime; } void XNServiceObject::SetVersion(const QString &version) { Q_D(XNServiceObject); d->_sVersion = version; } void XNServiceObject::SetDescription(const QString &sDescription) { Q_D(XNServiceObject); d->_sDescription = sDescription; } void XNServiceObject::SetAuthor(const QString &sAuthor) { Q_D(XNServiceObject); d->_sAuthor = sAuthor; } void XNServiceObject::SetXmlPath(const QString &sXmlPath) { Q_D(XNServiceObject); d->_sXmlPath = sXmlPath; } void XNServiceObject::SetCreateTime(const QDateTime &cTime) { Q_D(XNServiceObject); d->_cCreateTime = cTime; } void XNServiceObject::SetChangeTime(const QDateTime &cTime) { Q_D(XNServiceObject); d->_cChangeTime = cTime; } int XNServiceObject::RegisterEventHandler(const QString &eventName, std::function callback, bool async, XNEvent::Priority priority) { // 注册事件处理器 Q_D(XNServiceObject); if (d->pEventManager) { return d->pEventManager->RegisterEventHandler(eventName, callback, getUniqueId(), async, priority); } return -1; } void XNServiceObject::TriggerEvent(const QString &eventName, const QVariant &eventData, bool forceAsync, XNEvent::Priority priority) { // 触发事件 Q_D(XNServiceObject); if (d->pEventManager) { d->pEventManager->TriggerEvent(eventName, eventData, forceAsync, priority); } } int XNServiceObject::RegisterRTEventHandler(const QString &eventName, std::function callback) { return RegisterEventHandler(eventName, callback, true, XNEvent::Priority::RealTime); } void XNServiceObject::TriggerRTEvent(const QString &eventName, const QVariant &eventData) { TriggerEvent(eventName, eventData, true, XNEvent::Priority::RealTime); } void XNServiceObject::OnInitialize() { Q_D(XNServiceObject); // 获取事件管理器 XNServiceManager *serviceManager = qobject_cast(parent()); if (serviceManager == nullptr) { LOG_WARNING("Failed to get ServiceManager!"); return; } d->pEventManager = serviceManager->parent()->findChild(); if (d->pEventManager == nullptr) { LOG_WARNING("Failed to get EventManager!"); return; } QFile file(GetXmlPath()); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { LOG_WARNING("Failed to open the service configuration file: %1!", GetXmlPath()); return; } QDomDocument doc; doc.setContent(&file); QDomElement rootNode = doc.documentElement(); QString serviceName = rootNode.firstChildElement("Name").text(); if (serviceName != objectName()) { LOG_WARNING("The service name in the configuration file of service %1 is not consistent " "with the service name in the configuration file of service %2!", objectName(), serviceName); return; } d->_sDescription = rootNode.firstChildElement("Description").text(); d->_sAuthor = rootNode.firstChildElement("Author").text(); d->_sVersion = rootNode.firstChildElement("Version").text(); d->_cCreateTime = QDateTime::fromString(rootNode.firstChildElement("CreateTime").text(), Qt::ISODate); d->_cChangeTime = QDateTime::fromString(rootNode.firstChildElement("ChangeTime").text(), Qt::ISODate); QDomElement nodeCmds = rootNode.firstChildElement("CommandList"); for (QDomElement nodeCmd = nodeCmds.firstChildElement("Command"); !nodeCmd.isNull(); nodeCmd = nodeCmd.nextSiblingElement("Command")) { QString cmdName = nodeCmd.attribute("Name"); QString cmdDescription = nodeCmd.attribute("Description"); QString cmdCall = nodeCmd.attribute("Call"); } } void XNServiceObject::OnPrepareForExecute() { Q_D(XNServiceObject); RegisterDDSParticipant(); } void XNServiceObject::RegisterDDSParticipant() { Q_D(XNServiceObject); //TODO 注册服务状态主题参与者 } XNEventManager *XNServiceObject::GetEventManager() const { Q_D(const XNServiceObject); return d->pEventManager; }