Add Event Subscriptions & Instance specific replies

This commit is contained in:
LordGrey
2024-04-25 22:12:30 +02:00
parent ec6a65bfbb
commit 7a604ee5e7
7 changed files with 179 additions and 115 deletions

View File

@@ -1312,45 +1312,51 @@ void JsonAPI::handleSystemCommand(const QJsonObject& /*message*/, const JsonApiC
void JsonAPI::sendSuccessReply(const JsonApiCommand& cmd)
{
sendSuccessReply(cmd.toString(), cmd.tan);
sendSuccessReply(cmd.toString(), cmd.tan, cmd.isInstanceCmd);
}
void JsonAPI::sendSuccessReply(const QString &command, int tan)
void JsonAPI::sendSuccessReply(const QString &command, int tan, InstanceCmd::Type isInstanceCmd)
{
// create reply
QJsonObject reply;
reply["instance"] = _hyperion->getInstanceIndex();
reply["success"] = true;
reply["command"] = command;
reply["tan"] = tan;
// send reply
if (isInstanceCmd == InstanceCmd::Yes)
{
reply["instance"] = _hyperion->getInstanceIndex();
}
emit callbackMessage(reply);
}
void JsonAPI::sendSuccessDataReply(const QJsonValue &infoData, const JsonApiCommand& cmd)
{
sendSuccessDataReplyWithError(infoData, cmd.toString(), cmd.tan, {});
sendSuccessDataReplyWithError(infoData, cmd.toString(), cmd.tan, {}, cmd.isInstanceCmd);
}
void JsonAPI::sendSuccessDataReply(const QJsonValue &infoData, const QString &command, int tan)
void JsonAPI::sendSuccessDataReply(const QJsonValue &infoData, const QString &command, int tan, InstanceCmd::Type isInstanceCmd)
{
sendSuccessDataReplyWithError(infoData, command, tan, {});
sendSuccessDataReplyWithError(infoData, command, tan, {}, isInstanceCmd);
}
void JsonAPI::sendSuccessDataReplyWithError(const QJsonValue &infoData, const JsonApiCommand& cmd, const QStringList& errorDetails)
{
sendSuccessDataReplyWithError(infoData, cmd.toString(), cmd.tan, errorDetails);
sendSuccessDataReplyWithError(infoData, cmd.toString(), cmd.tan, errorDetails, cmd.isInstanceCmd);
}
void JsonAPI::sendSuccessDataReplyWithError(const QJsonValue &infoData, const QString &command, int tan, const QStringList& errorDetails)
void JsonAPI::sendSuccessDataReplyWithError(const QJsonValue &infoData, const QString &command, int tan, const QStringList& errorDetails, InstanceCmd::Type isInstanceCmd)
{
QJsonObject reply;
reply["instance"] = _hyperion->getInstanceIndex();
reply["success"] = true;
reply["command"] = command;
reply["tan"] = tan;
if (isInstanceCmd == InstanceCmd::Yes)
{
reply["instance"] = _hyperion->getInstanceIndex();
}
reply["info"] = infoData;
if (!errorDetails.isEmpty())
@@ -1369,13 +1375,19 @@ void JsonAPI::sendSuccessDataReplyWithError(const QJsonValue &infoData, const QS
void JsonAPI::sendNewRequest(const QJsonValue &infoData, const JsonApiCommand& cmd)
{
sendSuccessDataReplyWithError(infoData, cmd.toString());
sendSuccessDataReplyWithError(infoData, cmd.toString(), cmd.isInstanceCmd);
}
void JsonAPI::sendNewRequest(const QJsonValue &infoData, const QString &command)
void JsonAPI::sendNewRequest(const QJsonValue &infoData, const QString &command, InstanceCmd::Type isInstanceCmd)
{
QJsonObject request;
request["command"] = command;
if (isInstanceCmd == InstanceCmd::Yes)
{
request["instance"] = _hyperion->getInstanceIndex();
}
request["info"] = infoData;
emit callbackMessage(request);
@@ -1383,24 +1395,26 @@ void JsonAPI::sendNewRequest(const QJsonValue &infoData, const QString &command)
void JsonAPI::sendErrorReply(const QString &error, const JsonApiCommand& cmd)
{
sendErrorReply(error, {}, cmd.toString(), cmd.tan);
sendErrorReply(error, {}, cmd.toString(), cmd.tan, cmd.isInstanceCmd);
}
void JsonAPI::sendErrorReply(const QString &error, const QStringList& errorDetails, const JsonApiCommand& cmd)
{
sendErrorReply(error, errorDetails, cmd.toString(), cmd.tan);
sendErrorReply(error, errorDetails, cmd.toString(), cmd.tan, cmd.isInstanceCmd);
}
void JsonAPI::sendErrorReply(const QString &error, const QStringList& errorDetails, const QString &command, int tan)
void JsonAPI::sendErrorReply(const QString &error, const QStringList& errorDetails, const QString &command, int tan, InstanceCmd::Type isInstanceCmd)
{
// create reply
QJsonObject reply;
reply["instance"] = _hyperion->getInstanceIndex();
reply["success"] = false;
reply["command"] = command;
reply["tan"] = tan;
if (isInstanceCmd == InstanceCmd::Yes)
{
reply["instance"] = _hyperion->getInstanceIndex();
}
reply["error"] = error;
if (!errorDetails.isEmpty())
{

View File

@@ -1,33 +1,20 @@
// proj incl
#include <api/JsonCallbacks.h>
#include <api/JsonInfo.h>
#include <api/JsonApiSubscription.h>
// hyperion
#include <hyperion/Hyperion.h>
// HyperionIManager
#include <hyperion/HyperionIManager.h>
// components
#include <events/EventHandler.h>
#include <hyperion/ComponentRegister.h>
// priorityMuxer
#include <hyperion/PriorityMuxer.h>
// utils
#include <utils/ColorSys.h>
#include <hyperion/ImageProcessor.h>
// qt
#include <QDateTime>
#include <QVariant>
#include <QImage>
#include <QBuffer>
// Image to led map helper
#include <hyperion/ImageProcessor.h>
using namespace hyperion;
JsonCallbacks::JsonCallbacks(Logger *log, const QString& peerAddress, QObject* parent)
@@ -56,6 +43,9 @@ bool JsonCallbacks::subscribe(const Subscription::Type cmd)
connect(_hyperion, &Hyperion::effectListUpdated, this, &JsonCallbacks::handleEffectListChange);
break;
#endif
case Subscription::EventUpdate:
connect(EventHandler::getInstance().data(), &EventHandler::signalEvent, this, &JsonCallbacks::handleEventUpdate);
break;
case Subscription::ImageToLedMappingUpdate:
connect(_hyperion, &Hyperion::imageToLedsMappingChanged, this, &JsonCallbacks::handleImageToLedsMappingChange);
break;
@@ -155,6 +145,9 @@ bool JsonCallbacks::unsubscribe(const Subscription::Type cmd)
disconnect(_hyperion, &Hyperion::effectListUpdated, this, &JsonCallbacks::handleEffectListChange);
break;
#endif
case Subscription::EventUpdate:
disconnect(EventHandler::getInstance().data(), &EventHandler::signalEvent, this, &JsonCallbacks::handleEventUpdate);
break;
case Subscription::ImageToLedMappingUpdate:
disconnect(_hyperion, &Hyperion::imageToLedsMappingChanged, this, &JsonCallbacks::handleImageToLedsMappingChange);
break;
@@ -290,9 +283,13 @@ QStringList JsonCallbacks::getSubscribedCommands() const
void JsonCallbacks::doCallback(Subscription::Type cmd, const QVariant& data)
{
QJsonObject obj;
obj["instance"] = _hyperion->getInstanceIndex();
obj["command"] = Subscription::toString(cmd);
if (Subscription::isInstacneSpecific(cmd))
{
obj["instance"] = _hyperion->getInstanceIndex();
}
if (data.userType() == QMetaType::QJsonArray) {
obj["data"] = data.toJsonArray();
} else {
@@ -449,3 +446,13 @@ void JsonCallbacks::handleLogMessageUpdate(const Logger::T_LOG_MESSAGE &msg)
doCallback(Subscription::LogMsgUpdate, QVariant(result));
}
void JsonCallbacks::handleEventUpdate(const Event &event)
{
QJsonObject result;
result["event"] = eventToString(event);
doCallback(Subscription::EventUpdate, QVariant(result));
}