mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2023-10-10 13:36:59 +02:00
add http jsonrpc (#450)
This commit is contained in:
parent
a99b7c5f59
commit
622a171808
@ -41,15 +41,22 @@ class JsonProcessor : public QObject
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
JsonProcessor(QString peerAddress);
|
///
|
||||||
|
/// Constructor
|
||||||
|
///
|
||||||
|
/// @param peerAddress provide the Address of the peer
|
||||||
|
/// @param noListener if true, this instance won't listen for hyperion push events
|
||||||
|
///
|
||||||
|
JsonProcessor(QString peerAddress, bool noListener = false);
|
||||||
~JsonProcessor();
|
~JsonProcessor();
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Handle an incoming JSON message
|
/// Handle an incoming JSON message
|
||||||
///
|
///
|
||||||
/// @param message the incoming message as string
|
/// @param message the incoming message as string
|
||||||
|
/// @param peerAddress overwrite peerAddress of constructor
|
||||||
///
|
///
|
||||||
void handleMessage(const QString & message);
|
void handleMessage(const QString & message, const QString peerAddress = NULL);
|
||||||
|
|
||||||
///
|
///
|
||||||
/// send a forced serverinfo to a client
|
/// send a forced serverinfo to a client
|
||||||
|
@ -38,7 +38,7 @@ using namespace hyperion;
|
|||||||
|
|
||||||
std::map<hyperion::Components, bool> JsonProcessor::_componentsPrevState;
|
std::map<hyperion::Components, bool> JsonProcessor::_componentsPrevState;
|
||||||
|
|
||||||
JsonProcessor::JsonProcessor(QString peerAddress)
|
JsonProcessor::JsonProcessor(QString peerAddress, bool noListener)
|
||||||
: QObject()
|
: QObject()
|
||||||
, _peerAddress(peerAddress)
|
, _peerAddress(peerAddress)
|
||||||
, _log(Logger::getInstance("JSONRPCPROCESSOR"))
|
, _log(Logger::getInstance("JSONRPCPROCESSOR"))
|
||||||
@ -51,8 +51,12 @@ JsonProcessor::JsonProcessor(QString peerAddress)
|
|||||||
connect(this, &JsonProcessor::forwardJsonMessage, _hyperion, &Hyperion::forwardJsonMessage);
|
connect(this, &JsonProcessor::forwardJsonMessage, _hyperion, &Hyperion::forwardJsonMessage);
|
||||||
// notify hyperion about a push emit
|
// notify hyperion about a push emit
|
||||||
connect(this, &JsonProcessor::pushReq, _hyperion, &Hyperion::hyperionStateChanged);
|
connect(this, &JsonProcessor::pushReq, _hyperion, &Hyperion::hyperionStateChanged);
|
||||||
|
|
||||||
|
if(!noListener)
|
||||||
|
{
|
||||||
// listen for sendServerInfo pushes from hyperion
|
// listen for sendServerInfo pushes from hyperion
|
||||||
connect(_hyperion, &Hyperion::sendServerInfo, this, &JsonProcessor::forceServerInfo);
|
connect(_hyperion, &Hyperion::sendServerInfo, this, &JsonProcessor::forceServerInfo);
|
||||||
|
}
|
||||||
|
|
||||||
// led color stream update timer
|
// led color stream update timer
|
||||||
_timer_ledcolors.setSingleShot(false);
|
_timer_ledcolors.setSingleShot(false);
|
||||||
@ -65,8 +69,11 @@ JsonProcessor::~JsonProcessor()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void JsonProcessor::handleMessage(const QString& messageString)
|
void JsonProcessor::handleMessage(const QString& messageString, const QString peerAddress)
|
||||||
{
|
{
|
||||||
|
if(!peerAddress.isNull())
|
||||||
|
_peerAddress = peerAddress;
|
||||||
|
|
||||||
QString errors;
|
QString errors;
|
||||||
|
|
||||||
try
|
try
|
||||||
|
@ -60,10 +60,14 @@ void StaticFileServing::onServerStarted (quint16 port)
|
|||||||
txtRecord
|
txtRecord
|
||||||
);
|
);
|
||||||
Debug(_log, "Web Config mDNS responder started");
|
Debug(_log, "Web Config mDNS responder started");
|
||||||
|
|
||||||
|
// json-rpc for http
|
||||||
|
_jsonProcessor = new JsonProcessor(QString("HTTP-API"),true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void StaticFileServing::onServerStopped () {
|
void StaticFileServing::onServerStopped () {
|
||||||
Info(_log, "stopped %s", _server->getServerName().toStdString().c_str());
|
Info(_log, "stopped %s", _server->getServerName().toStdString().c_str());
|
||||||
|
delete _jsonProcessor;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StaticFileServing::onServerError (QString msg)
|
void StaticFileServing::onServerError (QString msg)
|
||||||
@ -115,7 +119,9 @@ void StaticFileServing::onRequestNeedsReply (QtHttpRequest * request, QtHttpRepl
|
|||||||
QStringList uri_parts = path.split('/', QString::SkipEmptyParts);
|
QStringList uri_parts = path.split('/', QString::SkipEmptyParts);
|
||||||
|
|
||||||
// special uri handling for server commands
|
// special uri handling for server commands
|
||||||
if ( ! uri_parts.empty() && uri_parts.at(0) == "cgi" )
|
if ( ! uri_parts.empty() )
|
||||||
|
{
|
||||||
|
if(uri_parts.at(0) == "cgi")
|
||||||
{
|
{
|
||||||
uri_parts.removeAt(0);
|
uri_parts.removeAt(0);
|
||||||
try
|
try
|
||||||
@ -134,6 +140,24 @@ void StaticFileServing::onRequestNeedsReply (QtHttpRequest * request, QtHttpRepl
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
else if ( uri_parts.at(0) == "json-rpc" )
|
||||||
|
{
|
||||||
|
QMetaObject::Connection m_connection;
|
||||||
|
QByteArray data = request->getRawData();
|
||||||
|
QtHttpRequest::ClientInfo info = request->getClientInfo();
|
||||||
|
|
||||||
|
m_connection = QObject::connect(_jsonProcessor, &JsonProcessor::callbackMessage,
|
||||||
|
[reply](QJsonObject result) {
|
||||||
|
QJsonDocument doc(result);
|
||||||
|
reply->addHeader ("Content-Type", "application/json");
|
||||||
|
reply->appendRawData (doc.toJson());
|
||||||
|
});
|
||||||
|
|
||||||
|
_jsonProcessor->handleMessage(data,info.clientAddress.toString());
|
||||||
|
QObject::disconnect( m_connection );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
Q_INIT_RESOURCE(WebConfig);
|
Q_INIT_RESOURCE(WebConfig);
|
||||||
|
|
||||||
QFileInfo info(_baseUrl % "/" % path);
|
QFileInfo info(_baseUrl % "/" % path);
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
#include <hyperion/Hyperion.h>
|
#include <hyperion/Hyperion.h>
|
||||||
#include <utils/Logger.h>
|
#include <utils/Logger.h>
|
||||||
|
#include <utils/JsonProcessor.h>
|
||||||
|
|
||||||
|
|
||||||
class StaticFileServing : public QObject {
|
class StaticFileServing : public QObject {
|
||||||
@ -34,6 +35,7 @@ private:
|
|||||||
QMimeDatabase * _mimeDb;
|
QMimeDatabase * _mimeDb;
|
||||||
CgiHandler _cgi;
|
CgiHandler _cgi;
|
||||||
Logger * _log;
|
Logger * _log;
|
||||||
|
JsonProcessor * _jsonProcessor;
|
||||||
|
|
||||||
void printErrorToReply (QtHttpReply * reply, QtHttpReply::StatusCode code, QString errorMessage);
|
void printErrorToReply (QtHttpReply * reply, QtHttpReply::StatusCode code, QString errorMessage);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user