Revision control

Copy as Markdown

// Copyright (C) 2019 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
// Qt-Security score:significant reason:default
#include <private/opcuareadresult_p.h>
#include <private/universalnode_p.h>
#include <QOpcUaReadResult>
#include <QOpcUaClient>
#include <qopcuatype.h>
QT_BEGIN_NAMESPACE
/*!
\qmltype ReadResult
\inqmlmodule QtOpcUa
\brief Contains result data after reading from the server.
\since QtOpcUa 5.13
\deprecated [6.9]
This type is used to pass the read data after reading from the server using the function
\l Connection::readNodeAttributes.
*/
/*!
\qmlproperty Constants.NodeAttribute ReadResult::attribute
\readonly
The node attribute of data that was read.
*/
/*!
\qmlproperty string ReadResult::indexRange
\readonly
The index range of the data that was read.
*/
/*!
\qmlproperty string ReadResult::nodeId
\readonly
The node id of the node that was read.
*/
/*!
\qmlproperty string ReadResult::namespaceName
\readonly
The namespace name of the node that was read.
*/
/*!
\qmlproperty datetime ReadResult::serverTimestamp
\readonly
The server timestamp of the data that was read.
*/
/*!
\qmlproperty datetime ReadResult::sourceTimestamp
\readonly
The source timestamp of the data that was read.
*/
/*!
\qmlproperty variant ReadResult::value
\readonly
Actual data that was requested to be read.
*/
/*!
\qmlproperty Status ReadResult::status
\readonly
Result status of this ReadResult.
Before using any value of this ReadResult, the status
should be checked for \l {Status::Status}{Status.isGood}. To make sure
the server has provided valid data.
*/
class OpcUaReadResultData : public QSharedData
{
public:
OpcUaStatus status;
QOpcUa::NodeAttribute attribute;
QString indexRange;
QString nodeId;
QString namespaceName;
QDateTime serverTimestamp;
QDateTime sourceTimestamp;
QVariant value;
};
OpcUaReadResult::OpcUaReadResult()
: data(new OpcUaReadResultData)
{
data->attribute = QOpcUa::NodeAttribute::None;
}
OpcUaReadResult::OpcUaReadResult(const OpcUaReadResult &other)
: data(other.data)
{
}
OpcUaReadResult::OpcUaReadResult(const QOpcUaReadResult &other, const QOpcUaClient *client)
: data(new OpcUaReadResultData)
{
data->status = OpcUaStatus(other.statusCode());
data->attribute = other.attribute();
data->indexRange = other.indexRange();
data->serverTimestamp = other.serverTimestamp();
data->sourceTimestamp = other.sourceTimestamp();
data->value = other.value();
int namespaceIndex = -1;
UniversalNode::splitNodeIdAndNamespace(other.nodeId(), &namespaceIndex, &data->nodeId);
data->namespaceName = client->namespaceArray().at(namespaceIndex);
}
OpcUaReadResult &OpcUaReadResult::operator=(const OpcUaReadResult &rhs)
{
if (this != &rhs)
data.operator=(rhs.data);
return *this;
}
OpcUaReadResult::~OpcUaReadResult() = default;
const QString &OpcUaReadResult::indexRange() const
{
return data->indexRange;
}
const QString &OpcUaReadResult::nodeId() const
{
return data->nodeId;
}
QOpcUa::NodeAttribute OpcUaReadResult::attribute() const
{
return data->attribute;
}
const QString &OpcUaReadResult::namespaceName() const
{
return data->namespaceName;
}
const QDateTime &OpcUaReadResult::serverTimestamp() const
{
return data->serverTimestamp;
}
const QDateTime &OpcUaReadResult::sourceTimestamp() const
{
return data->sourceTimestamp;
}
const QVariant &OpcUaReadResult::value() const
{
return data->value;
}
OpcUaStatus OpcUaReadResult::status() const
{
return data->status;
}
QT_END_NAMESPACE