188 lines
4.7 KiB
C++
Executable File
188 lines
4.7 KiB
C++
Executable File
#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<void(const QVariant &)> 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<void(const QVariant &)> 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<XNServiceManager *>(parent());
|
|
if (serviceManager == nullptr) {
|
|
LOG_WARNING("Failed to get ServiceManager!");
|
|
return;
|
|
}
|
|
|
|
d->pEventManager = serviceManager->parent()->findChild<XNEventManager *>();
|
|
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;
|
|
}
|