Add basic communication with the JSON RPC 2.0 server
This commit is contained in:
parent
d226b35d55
commit
5acce61d6a
@ -4,15 +4,19 @@ QT += network websockets
|
|||||||
PKGCONFIG += nymea-mqtt
|
PKGCONFIG += nymea-mqtt
|
||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
|
jsonrpc/everestjsonrpcclient.cpp \
|
||||||
|
jsonrpc/everestjsonrpcinterface.cpp \
|
||||||
|
jsonrpc/everestjsonrpcreply.cpp \
|
||||||
mqtt/everestmqtt.cpp \
|
mqtt/everestmqtt.cpp \
|
||||||
mqtt/everestmqttclient.cpp \
|
mqtt/everestmqttclient.cpp \
|
||||||
mqtt/everestmqttdiscovery.cpp \
|
mqtt/everestmqttdiscovery.cpp \
|
||||||
integrationplugineverest.cpp \
|
integrationplugineverest.cpp
|
||||||
jsonrpc/everestjsonrpcclient.cpp
|
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
|
jsonrpc/everestjsonrpcclient.h \
|
||||||
|
jsonrpc/everestjsonrpcinterface.h \
|
||||||
|
jsonrpc/everestjsonrpcreply.h \
|
||||||
mqtt/everestmqtt.h \
|
mqtt/everestmqtt.h \
|
||||||
mqtt/everestmqttclient.h \
|
mqtt/everestmqttclient.h \
|
||||||
mqtt/everestmqttdiscovery.h \
|
mqtt/everestmqttdiscovery.h \
|
||||||
integrationplugineverest.h \
|
integrationplugineverest.h
|
||||||
jsonrpc/everestjsonrpcclient.h
|
|
||||||
|
|||||||
@ -41,7 +41,8 @@ IntegrationPluginEverest::IntegrationPluginEverest()
|
|||||||
|
|
||||||
void IntegrationPluginEverest::init()
|
void IntegrationPluginEverest::init()
|
||||||
{
|
{
|
||||||
|
EverestJsonRpcClient *client = new EverestJsonRpcClient(this);
|
||||||
|
client->setSeverUrl(QUrl("ws://10.10.10.165:8080"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void IntegrationPluginEverest::startMonitoringAutoThings()
|
void IntegrationPluginEverest::startMonitoringAutoThings()
|
||||||
|
|||||||
@ -35,6 +35,7 @@
|
|||||||
#include "extern-plugininfo.h"
|
#include "extern-plugininfo.h"
|
||||||
|
|
||||||
#include "mqtt/everestmqttclient.h"
|
#include "mqtt/everestmqttclient.h"
|
||||||
|
#include "jsonrpc/everestjsonrpcclient.h"
|
||||||
|
|
||||||
#include <mqttclient.h>
|
#include <mqttclient.h>
|
||||||
|
|
||||||
|
|||||||
@ -1,84 +1,109 @@
|
|||||||
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
*
|
||||||
|
* Copyright 2013 - 2025, nymea GmbH
|
||||||
|
* Contact: contact@nymea.io
|
||||||
|
*
|
||||||
|
* This file is part of nymea.
|
||||||
|
* This project including source code and documentation is protected by
|
||||||
|
* copyright law, and remains the property of nymea GmbH. All rights, including
|
||||||
|
* reproduction, publication, editing and translation, are reserved. The use of
|
||||||
|
* this project is subject to the terms of a license agreement to be concluded
|
||||||
|
* with nymea GmbH in accordance with the terms of use of nymea GmbH, available
|
||||||
|
* under https://nymea.io/license
|
||||||
|
*
|
||||||
|
* GNU Lesser General Public License Usage
|
||||||
|
* Alternatively, this project may be redistributed and/or modified under the
|
||||||
|
* terms of the GNU Lesser General Public License as published by the Free
|
||||||
|
* Software Foundation; version 3. This project is distributed in the hope that
|
||||||
|
* it will be useful, but WITHOUT ANY WARRANTY; without even the implied
|
||||||
|
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this project. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* For any further details and any questions please contact us under
|
||||||
|
* contact@nymea.io or see our FAQ/Licensing Information on
|
||||||
|
* https://nymea.io/license/faq
|
||||||
|
*
|
||||||
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||||
|
|
||||||
#include "everestjsonrpcclient.h"
|
#include "everestjsonrpcclient.h"
|
||||||
#include "extern-plugininfo.h"
|
#include "extern-plugininfo.h"
|
||||||
|
|
||||||
|
#include <QJsonDocument>
|
||||||
|
#include <QJsonParseError>
|
||||||
|
|
||||||
EverestJsonRpcClient::EverestJsonRpcClient(QObject *parent)
|
EverestJsonRpcClient::EverestJsonRpcClient(QObject *parent)
|
||||||
: QObject{parent}
|
: QObject{parent}
|
||||||
{
|
{
|
||||||
m_webSocket = new QWebSocket("nymea-client", QWebSocketProtocol::Version13, this);
|
m_interface = new EverestJsonRpcInterface(this);
|
||||||
|
connect(m_interface, &EverestJsonRpcInterface::connectedChanged, this, [this](bool connected){
|
||||||
connect(m_webSocket, &QWebSocket::disconnected, this, &EverestJsonRpcClient::onDisconnected);
|
if (connected) {
|
||||||
connect(m_webSocket, &QWebSocket::textMessageReceived, this, &EverestJsonRpcClient::onTextMessageReceived);
|
EverestJsonRpcReply *reply = hello();
|
||||||
connect(m_webSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onError(QAbstractSocket::SocketError)));
|
connect(reply, &EverestJsonRpcReply::finished, this, [this, reply](){
|
||||||
connect(m_webSocket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(onStateChanged(QAbstractSocket::SocketState)));
|
qCDebug(dcEverest()) << "Reply finished" << m_interface->serverUrl().toString() << reply->method();
|
||||||
}
|
});
|
||||||
|
} else {
|
||||||
EverestJsonRpcClient::~EverestJsonRpcClient()
|
// Client not available any more
|
||||||
{
|
|
||||||
disconnectServer();
|
|
||||||
}
|
|
||||||
|
|
||||||
void EverestJsonRpcClient::sendData(const QByteArray &data)
|
|
||||||
{
|
|
||||||
m_webSocket->sendTextMessage(QString::fromUtf8(data));
|
|
||||||
}
|
|
||||||
|
|
||||||
void EverestJsonRpcClient::connectServer(const QUrl &serverUrl)
|
|
||||||
{
|
|
||||||
if (m_connected) {
|
|
||||||
m_connected = false;
|
|
||||||
emit connectedChanged(m_connected);
|
|
||||||
m_webSocket->close();
|
|
||||||
}
|
|
||||||
|
|
||||||
m_serverUrl = serverUrl;
|
|
||||||
|
|
||||||
qCDebug(dcEverest()) << "Connecting to" << m_serverUrl.toString();
|
|
||||||
m_webSocket->open(m_serverUrl);
|
|
||||||
}
|
|
||||||
|
|
||||||
void EverestJsonRpcClient::disconnectServer()
|
|
||||||
{
|
|
||||||
qCDebug(dcEverest()) << "Disconnecting from" << m_serverUrl.toString();
|
|
||||||
m_webSocket->close();
|
|
||||||
}
|
|
||||||
|
|
||||||
void EverestJsonRpcClient::onDisconnected()
|
|
||||||
{
|
|
||||||
qCDebug(dcEverest()) << "Disconnected from" << m_webSocket->requestUrl().toString() << m_webSocket->closeReason();
|
|
||||||
|
|
||||||
if (m_connected) {
|
|
||||||
m_connected = false;
|
|
||||||
emit connectedChanged(m_connected);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void EverestJsonRpcClient::onError(QAbstractSocket::SocketError error)
|
|
||||||
{
|
|
||||||
qCDebug(dcEverest()) << "Socket error occurred" << error << m_webSocket->errorString();
|
|
||||||
}
|
|
||||||
|
|
||||||
void EverestJsonRpcClient::onStateChanged(QAbstractSocket::SocketState state)
|
|
||||||
{
|
|
||||||
qCDebug(dcEverest()) << "Socket state changed" << state;
|
|
||||||
|
|
||||||
switch (state) {
|
|
||||||
case QAbstractSocket::ConnectedState:
|
|
||||||
qCDebug(dcEverest()) << "Connected with" << m_webSocket->requestUrl().toString();
|
|
||||||
if (!m_connected) {
|
|
||||||
m_connected = true;
|
|
||||||
emit connectedChanged(m_connected);
|
|
||||||
}
|
}
|
||||||
break;
|
});
|
||||||
default:
|
|
||||||
if (m_connected) {
|
connect(m_interface, &EverestJsonRpcInterface::dataReceived, this, &EverestJsonRpcClient::processDataPacket);
|
||||||
m_connected = false;
|
|
||||||
emit connectedChanged(m_connected);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EverestJsonRpcClient::onTextMessageReceived(const QString &message)
|
QUrl EverestJsonRpcClient::serverUrl()
|
||||||
{
|
{
|
||||||
emit dataReceived(message.toUtf8());
|
return m_interface->serverUrl();
|
||||||
|
}
|
||||||
|
|
||||||
|
void EverestJsonRpcClient::setSeverUrl(const QUrl &serverUrl)
|
||||||
|
{
|
||||||
|
m_interface->connectServer(serverUrl);
|
||||||
|
}
|
||||||
|
|
||||||
|
EverestJsonRpcReply *EverestJsonRpcClient::hello()
|
||||||
|
{
|
||||||
|
EverestJsonRpcReply *reply = new EverestJsonRpcReply(m_commandId, "API.Hello", QVariantMap(), this);
|
||||||
|
qCDebug(dcEverest()) << "Calling" << reply->method();
|
||||||
|
sendRequest(reply->requestMap());
|
||||||
|
m_replies.insert(m_commandId, reply);
|
||||||
|
m_commandId++;
|
||||||
|
return reply;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EverestJsonRpcClient::sendRequest(const QVariantMap &request)
|
||||||
|
{
|
||||||
|
QByteArray data = QJsonDocument::fromVariant(request).toJson(QJsonDocument::Compact) + '\n';
|
||||||
|
qCDebug(dcEverest()) << "-->" << m_interface->serverUrl().toString() << qUtf8Printable(data);
|
||||||
|
m_interface->sendData(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EverestJsonRpcClient::processDataPacket(const QByteArray &data)
|
||||||
|
{
|
||||||
|
qCDebug(dcEverest()) << "<--" << m_interface->serverUrl().toString() << qUtf8Printable(data);
|
||||||
|
|
||||||
|
QJsonParseError error;
|
||||||
|
QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
|
||||||
|
if (error.error != QJsonParseError::NoError) {
|
||||||
|
qCWarning(dcEverest()) << "Invalid JSON data recived" << m_interface->serverUrl().toString() << error.errorString();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariantMap dataMap = jsonDoc.toVariant().toMap();
|
||||||
|
|
||||||
|
int commandId = dataMap.value("id").toInt();
|
||||||
|
EverestJsonRpcReply *reply = m_replies.take(commandId);
|
||||||
|
if (reply) {
|
||||||
|
qCDebug(dcEverest()) << QString("Got response for %1: %2").arg(reply->method(), QString::fromUtf8(jsonDoc.toJson(QJsonDocument::Indented)));
|
||||||
|
|
||||||
|
// if (dataMap.value("status").toString() == "error") {
|
||||||
|
// qCWarning(dcEverest()) << "Api error happend" << dataMap.value("error").toString();
|
||||||
|
// // FIMXME: handle json layer errors
|
||||||
|
// }
|
||||||
|
|
||||||
|
reply->setResponse(dataMap);
|
||||||
|
emit reply->finished();
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,36 +1,71 @@
|
|||||||
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
*
|
||||||
|
* Copyright 2013 - 2025, nymea GmbH
|
||||||
|
* Contact: contact@nymea.io
|
||||||
|
*
|
||||||
|
* This file is part of nymea.
|
||||||
|
* This project including source code and documentation is protected by
|
||||||
|
* copyright law, and remains the property of nymea GmbH. All rights, including
|
||||||
|
* reproduction, publication, editing and translation, are reserved. The use of
|
||||||
|
* this project is subject to the terms of a license agreement to be concluded
|
||||||
|
* with nymea GmbH in accordance with the terms of use of nymea GmbH, available
|
||||||
|
* under https://nymea.io/license
|
||||||
|
*
|
||||||
|
* GNU Lesser General Public License Usage
|
||||||
|
* Alternatively, this project may be redistributed and/or modified under the
|
||||||
|
* terms of the GNU Lesser General Public License as published by the Free
|
||||||
|
* Software Foundation; version 3. This project is distributed in the hope that
|
||||||
|
* it will be useful, but WITHOUT ANY WARRANTY; without even the implied
|
||||||
|
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this project. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* For any further details and any questions please contact us under
|
||||||
|
* contact@nymea.io or see our FAQ/Licensing Information on
|
||||||
|
* https://nymea.io/license/faq
|
||||||
|
*
|
||||||
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||||
|
|
||||||
#ifndef EVERESTJSONRPCCLIENT_H
|
#ifndef EVERESTJSONRPCCLIENT_H
|
||||||
#define EVERESTJSONRPCCLIENT_H
|
#define EVERESTJSONRPCCLIENT_H
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QWebSocket>
|
|
||||||
|
#include "everestjsonrpcreply.h"
|
||||||
|
#include "everestjsonrpcinterface.h"
|
||||||
|
|
||||||
class EverestJsonRpcClient : public QObject
|
class EverestJsonRpcClient : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit EverestJsonRpcClient(QObject *parent = nullptr);
|
explicit EverestJsonRpcClient(QObject *parent = nullptr);
|
||||||
~EverestJsonRpcClient();
|
|
||||||
|
|
||||||
void sendData(const QByteArray &data);
|
QUrl serverUrl();
|
||||||
|
void setSeverUrl(const QUrl &serverUrl);
|
||||||
|
|
||||||
public slots:
|
bool available() const;
|
||||||
void connectServer(const QUrl &serverUrl);
|
|
||||||
void disconnectServer();
|
EverestJsonRpcReply *hello();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void connectedChanged(bool connected);
|
void availableChanged(bool available);
|
||||||
void dataReceived(const QByteArray &data);
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
void onDisconnected();
|
|
||||||
void onError(QAbstractSocket::SocketError error);
|
|
||||||
void onStateChanged(QAbstractSocket::SocketState state);
|
|
||||||
void onTextMessageReceived(const QString &message);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QWebSocket *m_webSocket = nullptr;
|
bool m_available = false;
|
||||||
QUrl m_serverUrl;
|
|
||||||
bool m_connected = false;
|
int m_commandId = 0;
|
||||||
|
EverestJsonRpcInterface *m_interface = nullptr;
|
||||||
|
|
||||||
|
|
||||||
|
QHash<int, EverestJsonRpcReply *> m_replies;
|
||||||
|
|
||||||
|
void sendRequest(const QVariantMap &request);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void processDataPacket(const QByteArray &data);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // EVERESTJSONRPCCLIENT_H
|
#endif // EVERESTJSONRPCCLIENT_H
|
||||||
|
|||||||
125
everest/jsonrpc/everestjsonrpcinterface.cpp
Normal file
125
everest/jsonrpc/everestjsonrpcinterface.cpp
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
*
|
||||||
|
* Copyright 2013 - 2025, nymea GmbH
|
||||||
|
* Contact: contact@nymea.io
|
||||||
|
*
|
||||||
|
* This file is part of nymea.
|
||||||
|
* This project including source code and documentation is protected by
|
||||||
|
* copyright law, and remains the property of nymea GmbH. All rights, including
|
||||||
|
* reproduction, publication, editing and translation, are reserved. The use of
|
||||||
|
* this project is subject to the terms of a license agreement to be concluded
|
||||||
|
* with nymea GmbH in accordance with the terms of use of nymea GmbH, available
|
||||||
|
* under https://nymea.io/license
|
||||||
|
*
|
||||||
|
* GNU Lesser General Public License Usage
|
||||||
|
* Alternatively, this project may be redistributed and/or modified under the
|
||||||
|
* terms of the GNU Lesser General Public License as published by the Free
|
||||||
|
* Software Foundation; version 3. This project is distributed in the hope that
|
||||||
|
* it will be useful, but WITHOUT ANY WARRANTY; without even the implied
|
||||||
|
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this project. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* For any further details and any questions please contact us under
|
||||||
|
* contact@nymea.io or see our FAQ/Licensing Information on
|
||||||
|
* https://nymea.io/license/faq
|
||||||
|
*
|
||||||
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||||
|
|
||||||
|
#include "everestjsonrpcinterface.h"
|
||||||
|
#include "extern-plugininfo.h"
|
||||||
|
|
||||||
|
EverestJsonRpcInterface::EverestJsonRpcInterface(QObject *parent)
|
||||||
|
: QObject{parent}
|
||||||
|
{
|
||||||
|
m_webSocket = new QWebSocket("nymea-client", QWebSocketProtocol::Version13, this);
|
||||||
|
|
||||||
|
connect(m_webSocket, &QWebSocket::disconnected, this, &EverestJsonRpcInterface::onDisconnected);
|
||||||
|
connect(m_webSocket, &QWebSocket::textMessageReceived, this, &EverestJsonRpcInterface::onTextMessageReceived);
|
||||||
|
connect(m_webSocket, &QWebSocket::binaryMessageReceived, this, &EverestJsonRpcInterface::onBinaryMessageReceived);
|
||||||
|
connect(m_webSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onError(QAbstractSocket::SocketError)));
|
||||||
|
connect(m_webSocket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(onStateChanged(QAbstractSocket::SocketState)));
|
||||||
|
}
|
||||||
|
|
||||||
|
EverestJsonRpcInterface::~EverestJsonRpcInterface()
|
||||||
|
{
|
||||||
|
disconnectServer();
|
||||||
|
}
|
||||||
|
|
||||||
|
QUrl EverestJsonRpcInterface::serverUrl() const
|
||||||
|
{
|
||||||
|
return m_serverUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EverestJsonRpcInterface::sendData(const QByteArray &data)
|
||||||
|
{
|
||||||
|
m_webSocket->sendTextMessage(QString::fromUtf8(data));
|
||||||
|
}
|
||||||
|
|
||||||
|
void EverestJsonRpcInterface::connectServer(const QUrl &serverUrl)
|
||||||
|
{
|
||||||
|
if (m_connected) {
|
||||||
|
m_connected = false;
|
||||||
|
emit connectedChanged(m_connected);
|
||||||
|
m_webSocket->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
m_serverUrl = serverUrl;
|
||||||
|
|
||||||
|
qCDebug(dcEverest()) << "Connecting to" << m_serverUrl.toString();
|
||||||
|
m_webSocket->open(m_serverUrl);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EverestJsonRpcInterface::disconnectServer()
|
||||||
|
{
|
||||||
|
qCDebug(dcEverest()) << "Disconnecting from" << m_serverUrl.toString();
|
||||||
|
m_webSocket->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
void EverestJsonRpcInterface::onDisconnected()
|
||||||
|
{
|
||||||
|
qCDebug(dcEverest()) << "Disconnected from" << m_webSocket->requestUrl().toString() << m_webSocket->closeReason();
|
||||||
|
|
||||||
|
if (m_connected) {
|
||||||
|
m_connected = false;
|
||||||
|
emit connectedChanged(m_connected);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void EverestJsonRpcInterface::onError(QAbstractSocket::SocketError error)
|
||||||
|
{
|
||||||
|
qCDebug(dcEverest()) << "Socket error occurred" << error << m_webSocket->errorString();
|
||||||
|
}
|
||||||
|
|
||||||
|
void EverestJsonRpcInterface::onStateChanged(QAbstractSocket::SocketState state)
|
||||||
|
{
|
||||||
|
qCDebug(dcEverest()) << "Socket state changed" << state;
|
||||||
|
|
||||||
|
switch (state) {
|
||||||
|
case QAbstractSocket::ConnectedState:
|
||||||
|
qCDebug(dcEverest()) << "Connected with" << m_webSocket->requestUrl().toString();
|
||||||
|
if (!m_connected) {
|
||||||
|
m_connected = true;
|
||||||
|
emit connectedChanged(m_connected);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if (m_connected) {
|
||||||
|
m_connected = false;
|
||||||
|
emit connectedChanged(m_connected);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void EverestJsonRpcInterface::onTextMessageReceived(const QString &message)
|
||||||
|
{
|
||||||
|
emit dataReceived(message.toUtf8());
|
||||||
|
}
|
||||||
|
|
||||||
|
void EverestJsonRpcInterface::onBinaryMessageReceived(const QByteArray &message)
|
||||||
|
{
|
||||||
|
emit dataReceived(message);
|
||||||
|
}
|
||||||
70
everest/jsonrpc/everestjsonrpcinterface.h
Normal file
70
everest/jsonrpc/everestjsonrpcinterface.h
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
*
|
||||||
|
* Copyright 2013 - 2025, nymea GmbH
|
||||||
|
* Contact: contact@nymea.io
|
||||||
|
*
|
||||||
|
* This file is part of nymea.
|
||||||
|
* This project including source code and documentation is protected by
|
||||||
|
* copyright law, and remains the property of nymea GmbH. All rights, including
|
||||||
|
* reproduction, publication, editing and translation, are reserved. The use of
|
||||||
|
* this project is subject to the terms of a license agreement to be concluded
|
||||||
|
* with nymea GmbH in accordance with the terms of use of nymea GmbH, available
|
||||||
|
* under https://nymea.io/license
|
||||||
|
*
|
||||||
|
* GNU Lesser General Public License Usage
|
||||||
|
* Alternatively, this project may be redistributed and/or modified under the
|
||||||
|
* terms of the GNU Lesser General Public License as published by the Free
|
||||||
|
* Software Foundation; version 3. This project is distributed in the hope that
|
||||||
|
* it will be useful, but WITHOUT ANY WARRANTY; without even the implied
|
||||||
|
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this project. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* For any further details and any questions please contact us under
|
||||||
|
* contact@nymea.io or see our FAQ/Licensing Information on
|
||||||
|
* https://nymea.io/license/faq
|
||||||
|
*
|
||||||
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||||
|
|
||||||
|
#ifndef EVERESTJSONRPCINTERFACE_H
|
||||||
|
#define EVERESTJSONRPCINTERFACE_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <QWebSocket>
|
||||||
|
|
||||||
|
class EverestJsonRpcInterface : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit EverestJsonRpcInterface(QObject *parent = nullptr);
|
||||||
|
~EverestJsonRpcInterface();
|
||||||
|
|
||||||
|
QUrl serverUrl() const;
|
||||||
|
|
||||||
|
void sendData(const QByteArray &data);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void connectServer(const QUrl &serverUrl);
|
||||||
|
void disconnectServer();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void connectedChanged(bool connected);
|
||||||
|
void dataReceived(const QByteArray &data);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void onDisconnected();
|
||||||
|
void onError(QAbstractSocket::SocketError error);
|
||||||
|
void onStateChanged(QAbstractSocket::SocketState state);
|
||||||
|
void onTextMessageReceived(const QString &message);
|
||||||
|
void onBinaryMessageReceived(const QByteArray &message);
|
||||||
|
|
||||||
|
private:
|
||||||
|
QWebSocket *m_webSocket = nullptr;
|
||||||
|
QUrl m_serverUrl;
|
||||||
|
bool m_connected = false;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // EVERESTJSONRPCINTERFACE_H
|
||||||
79
everest/jsonrpc/everestjsonrpcreply.cpp
Normal file
79
everest/jsonrpc/everestjsonrpcreply.cpp
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
*
|
||||||
|
* Copyright 2013 - 2025, nymea GmbH
|
||||||
|
* Contact: contact@nymea.io
|
||||||
|
*
|
||||||
|
* This file is part of nymea.
|
||||||
|
* This project including source code and documentation is protected by
|
||||||
|
* copyright law, and remains the property of nymea GmbH. All rights, including
|
||||||
|
* reproduction, publication, editing and translation, are reserved. The use of
|
||||||
|
* this project is subject to the terms of a license agreement to be concluded
|
||||||
|
* with nymea GmbH in accordance with the terms of use of nymea GmbH, available
|
||||||
|
* under https://nymea.io/license
|
||||||
|
*
|
||||||
|
* GNU Lesser General Public License Usage
|
||||||
|
* Alternatively, this project may be redistributed and/or modified under the
|
||||||
|
* terms of the GNU Lesser General Public License as published by the Free
|
||||||
|
* Software Foundation; version 3. This project is distributed in the hope that
|
||||||
|
* it will be useful, but WITHOUT ANY WARRANTY; without even the implied
|
||||||
|
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this project. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* For any further details and any questions please contact us under
|
||||||
|
* contact@nymea.io or see our FAQ/Licensing Information on
|
||||||
|
* https://nymea.io/license/faq
|
||||||
|
*
|
||||||
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||||
|
|
||||||
|
#include "everestjsonrpcreply.h"
|
||||||
|
|
||||||
|
EverestJsonRpcReply::EverestJsonRpcReply(int commandId, QString method, QVariantMap params, QObject *parent)
|
||||||
|
: QObject{parent},
|
||||||
|
m_commandId{commandId},
|
||||||
|
m_method{method},
|
||||||
|
m_params{params}
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int EverestJsonRpcReply::commandId() const
|
||||||
|
{
|
||||||
|
return m_commandId;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QString EverestJsonRpcReply::method() const
|
||||||
|
{
|
||||||
|
return m_method;
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariantMap EverestJsonRpcReply::params() const
|
||||||
|
{
|
||||||
|
return m_params;
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariantMap EverestJsonRpcReply::requestMap()
|
||||||
|
{
|
||||||
|
QVariantMap request;
|
||||||
|
request.insert("id", commandId());
|
||||||
|
request.insert("jsonrpc", "2.0");
|
||||||
|
request.insert("method", method());
|
||||||
|
if (!m_params.isEmpty())
|
||||||
|
request.insert("params", params());
|
||||||
|
|
||||||
|
m_commandId++;
|
||||||
|
return request;
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariantMap EverestJsonRpcReply::response() const
|
||||||
|
{
|
||||||
|
return m_response;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EverestJsonRpcReply::setResponse(const QVariantMap &response)
|
||||||
|
{
|
||||||
|
m_response = response;
|
||||||
|
}
|
||||||
62
everest/jsonrpc/everestjsonrpcreply.h
Normal file
62
everest/jsonrpc/everestjsonrpcreply.h
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
*
|
||||||
|
* Copyright 2013 - 2025, nymea GmbH
|
||||||
|
* Contact: contact@nymea.io
|
||||||
|
*
|
||||||
|
* This file is part of nymea.
|
||||||
|
* This project including source code and documentation is protected by
|
||||||
|
* copyright law, and remains the property of nymea GmbH. All rights, including
|
||||||
|
* reproduction, publication, editing and translation, are reserved. The use of
|
||||||
|
* this project is subject to the terms of a license agreement to be concluded
|
||||||
|
* with nymea GmbH in accordance with the terms of use of nymea GmbH, available
|
||||||
|
* under https://nymea.io/license
|
||||||
|
*
|
||||||
|
* GNU Lesser General Public License Usage
|
||||||
|
* Alternatively, this project may be redistributed and/or modified under the
|
||||||
|
* terms of the GNU Lesser General Public License as published by the Free
|
||||||
|
* Software Foundation; version 3. This project is distributed in the hope that
|
||||||
|
* it will be useful, but WITHOUT ANY WARRANTY; without even the implied
|
||||||
|
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this project. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* For any further details and any questions please contact us under
|
||||||
|
* contact@nymea.io or see our FAQ/Licensing Information on
|
||||||
|
* https://nymea.io/license/faq
|
||||||
|
*
|
||||||
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||||
|
|
||||||
|
#ifndef EVERESTJSONRPCREPLY_H
|
||||||
|
#define EVERESTJSONRPCREPLY_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <QVariantMap>
|
||||||
|
|
||||||
|
class EverestJsonRpcReply : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit EverestJsonRpcReply(int commandId, QString method, QVariantMap params = QVariantMap(), QObject *parent = nullptr);
|
||||||
|
|
||||||
|
int commandId() const;
|
||||||
|
QString method() const;
|
||||||
|
QVariantMap params() const;
|
||||||
|
QVariantMap requestMap();
|
||||||
|
|
||||||
|
QVariantMap response() const;
|
||||||
|
void setResponse(const QVariantMap &response);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void finished();
|
||||||
|
|
||||||
|
private:
|
||||||
|
int m_commandId;
|
||||||
|
QString m_method;
|
||||||
|
QVariantMap m_params;
|
||||||
|
QVariantMap m_response;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // EVERESTJSONRPCREPLY_H
|
||||||
Loading…
x
Reference in New Issue
Block a user