testing http instead of udp

This commit is contained in:
bernhard.trinnes 2020-08-18 19:03:16 +02:00 committed by Simon Stürz
parent 8a5f32c479
commit 1459ab4d8f
3 changed files with 36 additions and 10 deletions

View File

@ -75,11 +75,11 @@ void IntegrationPluginSma::setupThing(ThingSetupInfo *info)
Thing *thing = info->thing(); Thing *thing = info->thing();
if (!m_sunnyWebBoxCommunication) { if (!m_sunnyWebBoxCommunication) {
m_sunnyWebBoxCommunication = new SunnyWebBoxCommunication(this); m_sunnyWebBoxCommunication = new SunnyWebBoxCommunication(hardwareManager()->networkManager(), this);
} }
if (!m_refreshTimer) { if (!m_refreshTimer) {
m_refreshTimer = hardwareManager()->pluginTimerManager()->registerTimer(10); m_refreshTimer = hardwareManager()->pluginTimerManager()->registerTimer(30);
connect(m_refreshTimer, &PluginTimer::timeout, this, &IntegrationPluginSma::onRefreshTimer); connect(m_refreshTimer, &PluginTimer::timeout, this, &IntegrationPluginSma::onRefreshTimer);
} }

View File

@ -35,8 +35,12 @@
#include "QJsonObject" #include "QJsonObject"
#include <QUuid> #include <QUuid>
#include <QTimer> #include <QTimer>
#include <QNetworkReply>
#include <QNetworkRequest>
SunnyWebBoxCommunication::SunnyWebBoxCommunication(QObject *parent) : QObject(parent) SunnyWebBoxCommunication::SunnyWebBoxCommunication(NetworkAccessManager *networkAccessManager, QObject *parent) :
QObject(parent),
m_networkManager(networkAccessManager)
{ {
m_udpSocket = new QUdpSocket(this); m_udpSocket = new QUdpSocket(this);
m_udpSocket->bind(QHostAddress::Any, m_port); m_udpSocket->bind(QHostAddress::Any, m_port);
@ -65,25 +69,43 @@ QString SunnyWebBoxCommunication::sendMessage(const QHostAddress &address, const
QJsonDocument doc; QJsonDocument doc;
QJsonObject obj; QJsonObject obj;
obj.insert("params", QJsonObject());
obj["format"] = "JSON"; obj["format"] = "JSON";
obj["id"] = requestId; obj["id"] = requestId;
obj["proc"] = procedure; obj["proc"] = procedure;
obj["version"] = "1.0"; obj["version"] = "1.0";
doc.setObject(obj); doc.setObject(obj);
QUrl url;
url.setHost(address.toString());
url.setPath("/rpc");
url.setScheme("http");
QNetworkRequest request(url);
request.setHeader(QNetworkRequest::KnownHeaders::ContentTypeHeader, "application/json");
QByteArray data = doc.toJson(QJsonDocument::JsonFormat::Compact); QByteArray data = doc.toJson(QJsonDocument::JsonFormat::Compact);
QNetworkReply *reply = m_networkManager->post(request, data);
connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater);
connect(reply, &QNetworkReply::finished, this, [this, address, requestId, reply]{
//int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
QByteArray data = reply->readAll();
qCDebug(dcSma()) << "Received reply" << data;
datagramReceived(address, data);
});
/* if(!m_messageResponsePending) {
qCDebug(dcSma()) << "Send message" << data << address << m_port; qCDebug(dcSma()) << "Send message" << data << address << m_port;
if(m_messageResponsePending) {
m_udpSocket->writeDatagram(data, address, m_port); m_udpSocket->writeDatagram(data, address, m_port);
m_messageResponsePending = true; m_messageResponsePending = true;
} else { } else {
if (m_messageQueue[address].length() < 40) { if (m_messageQueue[address].length() < 40) {
qCDebug(dcSma()) << "Adding message to queue" << data << address << m_port;
m_messageQueue[address].append(data); m_messageQueue[address].append(data);
} else { } else {
qCWarning(dcSma()) << "Message queue overflow"; qCWarning(dcSma()) << "Message queue overflow";
return ""; return "";
} }
} }*/
return requestId; return requestId;
} }
@ -101,12 +123,13 @@ QString SunnyWebBoxCommunication::sendMessage(const QHostAddress &address, const
obj["version"] = "1.0"; obj["version"] = "1.0";
doc.setObject(obj); doc.setObject(obj);
QByteArray data = doc.toJson(QJsonDocument::JsonFormat::Compact); QByteArray data = doc.toJson(QJsonDocument::JsonFormat::Compact);
if(!m_messageResponsePending) {
qCDebug(dcSma()) << "Send message" << data << address << m_port; qCDebug(dcSma()) << "Send message" << data << address << m_port;
if(m_messageResponsePending) {
m_udpSocket->writeDatagram(data, address, m_port); m_udpSocket->writeDatagram(data, address, m_port);
m_messageResponsePending = true; m_messageResponsePending = true;
} else { } else {
if (m_messageQueue[address].length() < 40) { if (m_messageQueue[address].length() < 40) {
qCDebug(dcSma()) << "Adding message to queue" << data << address << m_port;
m_messageQueue[address].append(data); m_messageQueue[address].append(data);
} else { } else {
qCDebug(dcSma()) << "Message queue overflow"; qCDebug(dcSma()) << "Message queue overflow";

View File

@ -34,16 +34,19 @@
#include <QObject> #include <QObject>
#include <QUdpSocket> #include <QUdpSocket>
#include "network/networkaccessmanager.h"
class SunnyWebBoxCommunication : public QObject class SunnyWebBoxCommunication : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit SunnyWebBoxCommunication(QObject *parent = nullptr); explicit SunnyWebBoxCommunication(NetworkAccessManager *networkAccessManager, QObject *parent = nullptr);
QString sendMessage(const QHostAddress &address, const QString &procedure); QString sendMessage(const QHostAddress &address, const QString &procedure);
QString sendMessage(const QHostAddress &address, const QString &procedure, const QJsonObject &params); QString sendMessage(const QHostAddress &address, const QString &procedure, const QJsonObject &params);
private: private:
NetworkAccessManager *m_networkManager;
int m_port = 34268; int m_port = 34268;
bool m_messageResponsePending = false; bool m_messageResponsePending = false;
QUdpSocket *m_udpSocket; QUdpSocket *m_udpSocket;