Quick CoAP Multicast Discovery▲
Sélectionnez
// 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_LOGGING_CATEGORY(lcCoapClient, "qt.coap.client"
)
QmlCoapMulticastClient::
QmlCoapMulticastClient(QObject *
parent)
:
QCoapClient(QtCoap::SecurityMode::
NoSecurity, parent)
{
connect(this
, &
amp;QCoapClient::
finished, this
,
[this
](QCoapReply *
reply) {
if
(reply) {
emit finished(static_cast
&
lt;int
&
gt;(reply-&
gt;errorReceived()));
reply-&
gt;deleteLater();
if
(m_reply ==
reply) {
m_reply =
nullptr
;
emit isDiscoveringChanged();
}
}
else
{
qCWarning(lcCoapClient, "Something went wrong, received a null reply"
);
}
}
);
connect(this
, &
amp;QCoapClient::
error, this
,
[this
](QCoapReply *
, QtCoap::
Error err) {
emit finished(static_cast
&
lt;int
&
gt;(err));
}
);
}
void
QmlCoapMulticastClient::
discover(const
QString &
amp;host, int
port, const
QString &
amp;discoveryPath)
{
QUrl url;
url.setHost(host);
url.setPort(port);
m_reply =
QCoapClient::
discover(url, discoveryPath);
if
(m_reply) {
connect(m_reply, &
amp;QCoapResourceDiscoveryReply::
discovered,
this
, &
amp;QmlCoapMulticastClient::
onDiscovered);
emit isDiscoveringChanged();
}
else
{
qCWarning(lcCoapClient, "Discovery request failed."
);
}
}
void
QmlCoapMulticastClient::
discover(QtCoap::
MulticastGroup group, int
port,
const
QString &
amp;discoveryPath)
{
m_reply =
QCoapClient::
discover(group, port, discoveryPath);
if
(m_reply) {
connect(m_reply, &
amp;QCoapResourceDiscoveryReply::
discovered,
this
, &
amp;QmlCoapMulticastClient::
onDiscovered);
emit isDiscoveringChanged();
}
else
{
qCWarning(lcCoapClient, "Discovery request failed."
);
}
}
void
QmlCoapMulticastClient::
stopDiscovery()
{
if
(m_reply)
m_reply-&
gt;abortRequest();
}
bool
QmlCoapMulticastClient::
isDiscovering() const
{
return
m_reply &
amp;&
amp; !
m_reply-&
gt;isFinished();
}
void
QmlCoapMulticastClient::
onDiscovered(QCoapResourceDiscoveryReply *
reply,
const
QList&
lt;QCoapResource&
gt; &
amp;resources)
{
Q_UNUSED(reply)
for
(const
auto
&
amp;resource : resources)
emit discovered(resource);
}
#include
"moc_qmlcoapmulticastclient.cpp"