mirror of https://github.com/qt/qtcoap.git
93 lines
2.7 KiB
C++
93 lines
2.7 KiB
C++
// Copyright (C) 2019 The Qt Company Ltd.
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
|
|
|
#include "qmlcoapmulticastclient.h"
|
|
|
|
#include <QCoapResourceDiscoveryReply>
|
|
#include <QLoggingCategory>
|
|
|
|
Q_STATIC_LOGGING_CATEGORY(lcCoapClient, "qt.coap.client")
|
|
|
|
//! [ctor]
|
|
QmlCoapMulticastClient::QmlCoapMulticastClient(QObject *parent)
|
|
: QCoapClient(QtCoap::SecurityMode::NoSecurity, parent)
|
|
{
|
|
connect(this, &QCoapClient::finished, this,
|
|
[this](QCoapReply *reply) {
|
|
if (reply) {
|
|
emit finished(static_cast<int>(reply->errorReceived()));
|
|
reply->deleteLater();
|
|
if (m_reply == reply) {
|
|
m_reply = nullptr;
|
|
emit isDiscoveringChanged();
|
|
}
|
|
} else {
|
|
qCWarning(lcCoapClient, "Something went wrong, received a null reply");
|
|
}
|
|
});
|
|
|
|
connect(this, &QCoapClient::error, this,
|
|
[this](QCoapReply *, QtCoap::Error err) {
|
|
emit finished(static_cast<int>(err));
|
|
});
|
|
}
|
|
//! [ctor]
|
|
|
|
//! [discover_custom]
|
|
void QmlCoapMulticastClient::discover(const QString &host, int port, const QString &discoveryPath)
|
|
{
|
|
QUrl url;
|
|
url.setHost(host);
|
|
url.setPort(port);
|
|
|
|
m_reply = QCoapClient::discover(url, discoveryPath);
|
|
if (m_reply) {
|
|
connect(m_reply, &QCoapResourceDiscoveryReply::discovered,
|
|
this, &QmlCoapMulticastClient::onDiscovered);
|
|
emit isDiscoveringChanged();
|
|
} else {
|
|
qCWarning(lcCoapClient, "Discovery request failed.");
|
|
}
|
|
}
|
|
//! [discover_custom]
|
|
|
|
//! [discover_group]
|
|
void QmlCoapMulticastClient::discover(QtCoap::MulticastGroup group, int port,
|
|
const QString &discoveryPath)
|
|
{
|
|
m_reply = QCoapClient::discover(group, port, discoveryPath);
|
|
if (m_reply) {
|
|
connect(m_reply, &QCoapResourceDiscoveryReply::discovered,
|
|
this, &QmlCoapMulticastClient::onDiscovered);
|
|
emit isDiscoveringChanged();
|
|
} else {
|
|
qCWarning(lcCoapClient, "Discovery request failed.");
|
|
}
|
|
}
|
|
//! [discover_group]
|
|
|
|
//! [stop_discovery]
|
|
void QmlCoapMulticastClient::stopDiscovery()
|
|
{
|
|
if (m_reply)
|
|
m_reply->abortRequest();
|
|
}
|
|
//! [stop_discovery]
|
|
|
|
bool QmlCoapMulticastClient::isDiscovering() const
|
|
{
|
|
return m_reply && !m_reply->isFinished();
|
|
}
|
|
|
|
//! [on_discovered]
|
|
void QmlCoapMulticastClient::onDiscovered(QCoapResourceDiscoveryReply *reply,
|
|
const QList<QCoapResource> &resources)
|
|
{
|
|
Q_UNUSED(reply)
|
|
for (const auto &resource : resources)
|
|
emit discovered(resource);
|
|
}
|
|
//! [on_discovered]
|
|
|
|
#include "moc_qmlcoapmulticastclient.cpp"
|