mirror of
https://github.com/Fishwaldo/qt-openzwave.git
synced 2025-07-18 19:18:21 +00:00
Porting to RapidJson
This commit is contained in:
parent
f805d596dc
commit
d634d95c45
67 changed files with 494 additions and 588 deletions
|
@ -1,3 +1,6 @@
|
|||
#include <rapidjson/error/en.h>
|
||||
|
||||
|
||||
#include "mqttcommands/mqttcommands.h"
|
||||
#include "mqttcommands/ping.h"
|
||||
#include "mqttcommands/open.h"
|
||||
|
@ -61,61 +64,61 @@ mqttpublisher *MqttCommand::getMqttPublisher() {
|
|||
|
||||
void MqttCommand::messageReceived(QMqttMessage msg) {
|
||||
qCDebug(ozwmc) << "Got "<< msg.topic().name()<< " Message: " << msg.payload();
|
||||
QJsonParseError jerrormsg;
|
||||
QJsonDocument jmsg = QJsonDocument::fromJson(msg.payload(), &jerrormsg);
|
||||
if (jmsg.isNull()) {
|
||||
QJsonObject js;
|
||||
js["Error"] = jerrormsg.errorString();
|
||||
rapidjson::Document jmsg;
|
||||
jmsg.Parse(msg.payload());
|
||||
if (jmsg.HasParseError()) {
|
||||
rapidjson::Document js;
|
||||
QT2JS::SetString(js, "Error", rapidjson::GetParseError_En(jmsg.GetParseError()));
|
||||
emit sendCommandUpdate(GetCommand(), js);
|
||||
qCWarning(ozwmc) << "Json Parse Error for " << GetCommand() << ": " << jerrormsg.errorString() << ": " << msg.payload();
|
||||
qCWarning(ozwmc) << "Json Parse Error for " << GetCommand() << ": " << rapidjson::GetParseError_En(jmsg.GetParseError()) << ": " << msg.payload();
|
||||
return;
|
||||
}
|
||||
QString field;
|
||||
foreach (field, this->m_requiredIntFields) {
|
||||
if (jmsg[field].isUndefined()) {
|
||||
QJsonObject js;
|
||||
js["Error"] = QString("Missing Field ").append(field);
|
||||
if (!jmsg.HasMember(field.toStdString().c_str())) {
|
||||
rapidjson::Document js;
|
||||
QT2JS::SetString(js, "Error", QString("Missing Field ").append(field).toStdString().c_str());
|
||||
emit sendCommandUpdate(GetCommand(), js);
|
||||
qCWarning(ozwmc) << "Missing Field for " << GetCommand() << ": " << field << ": " << msg.payload();
|
||||
return;
|
||||
}
|
||||
if (!jmsg[field].isDouble()) {
|
||||
QJsonObject js;
|
||||
js["Error"] = QString("Incorrect Field Type: ").append(field).append(": Not Integer");
|
||||
if (!jmsg[field.toStdString().c_str()].IsNumber()) {
|
||||
rapidjson::Document js;
|
||||
QT2JS::SetString(js, "Error", QString("Incorrect Field Type: ").append(field).append(": Not Integer").toStdString().c_str());
|
||||
emit sendCommandUpdate(GetCommand(), js);
|
||||
qCWarning(ozwmc) << "Incorrect Field Type (Int) for " << GetCommand() << ": " << field << ": " << jmsg[field].type() << msg.payload();
|
||||
qCWarning(ozwmc) << "Incorrect Field Type (Int) for " << GetCommand() << ": " << field << ": " << jmsg[field.toStdString().c_str()].GetType() << msg.payload();
|
||||
return;
|
||||
}
|
||||
}
|
||||
foreach (field, this->m_requiredStringFields) {
|
||||
if (jmsg[field].isUndefined()) {
|
||||
QJsonObject js;
|
||||
js["Error"] = QString("Missing Field ").append(field);
|
||||
if (!jmsg.HasMember(field.toStdString().c_str())) {
|
||||
rapidjson::Document js;
|
||||
QT2JS::SetString(js, "Error", QString("Missing Field ").append(field).toStdString().c_str());
|
||||
emit sendCommandUpdate(GetCommand(), js);
|
||||
qCWarning(ozwmc) << "Missing Field for " << GetCommand() << ": " << field << ": " << msg.payload();
|
||||
return;
|
||||
}
|
||||
if (!jmsg[field].isString()) {
|
||||
QJsonObject js;
|
||||
js["Error"] = QString("Incorrect Field Type: ").append(field).append(": Not String");
|
||||
if (!jmsg[field.toStdString().c_str()].IsString()) {
|
||||
rapidjson::Document js;
|
||||
QT2JS::SetString(js, "Error", QString("Incorrect Field Type: ").append(field).append(": Not String").toStdString().c_str());
|
||||
emit sendCommandUpdate(GetCommand(), js);
|
||||
qCWarning(ozwmc) << "Incorrect Field Type (String) for " << GetCommand() << ": " << field << ": " << jmsg[field].type() << msg.payload();
|
||||
qCWarning(ozwmc) << "Incorrect Field Type (String) for " << GetCommand() << ": " << field << ": " << jmsg[field.toStdString().c_str()].GetType() << msg.payload();
|
||||
return;
|
||||
}
|
||||
}
|
||||
foreach (field, this->m_requiredBoolFields) {
|
||||
if (jmsg[field].isUndefined()) {
|
||||
QJsonObject js;
|
||||
js["Error"] = QString("Missing Field ").append(field);
|
||||
if (!jmsg.HasMember(field.toStdString().c_str())) {
|
||||
rapidjson::Document js;
|
||||
QT2JS::SetString(js, "Error", QString("Missing Field ").append(field).toStdString().c_str());
|
||||
emit sendCommandUpdate(GetCommand(), js);
|
||||
qCWarning(ozwmc) << "Missing Field for " << GetCommand() << ": " << field << ": " << msg.payload();
|
||||
return;
|
||||
}
|
||||
if (!jmsg[field].isBool()) {
|
||||
QJsonObject js;
|
||||
js["Error"] = QString("Incorrect Field Type: ").append(field).append(": Not Bool");
|
||||
if (!jmsg[field.toStdString().c_str()].IsBool()) {
|
||||
rapidjson::Document js;
|
||||
QT2JS::SetString(js, "Error", QString("Incorrect Field Type: ").append(field).append(": Not Bool").toStdString().c_str());
|
||||
emit sendCommandUpdate(GetCommand(), js);
|
||||
qCWarning(ozwmc) << "Incorrect Field Type (Bool) for " << GetCommand() << ": " << field << ": " << jmsg[field].type() << msg.payload();
|
||||
qCWarning(ozwmc) << "Incorrect Field Type (Bool) for " << GetCommand() << ": " << field << ": " << jmsg[field.toStdString().c_str()].GetType() << msg.payload();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -128,29 +131,47 @@ void MqttCommand::messageReceived(QMqttMessage msg) {
|
|||
}
|
||||
}
|
||||
|
||||
bool MqttCommand::checkNode(QJsonDocument jmsg, QString field) {
|
||||
quint8 node = jmsg[field].toInt();
|
||||
bool MqttCommand::checkNode(rapidjson::Document &jmsg, QString field) {
|
||||
if (!jmsg.HasMember(field.toStdString().c_str())) {
|
||||
qCWarning(ozwmc) << "Node " << field <<" Is Missing from Message";
|
||||
return false;
|
||||
}
|
||||
if (!jmsg[field.toStdString().c_str()].IsUint()) {
|
||||
qCWarning(ozwmc) << "Node " << field << "is not a Uint32";
|
||||
return false;
|
||||
}
|
||||
quint8 node = jmsg[field.toStdString().c_str()].GetInt();
|
||||
if (node == 0 || node == 255) {
|
||||
qCWarning(ozwmc) << "Invalid Node in field " << field << " for message " << jmsg.toJson();
|
||||
qCWarning(ozwmc) << "Invalid Node in field " << field << " for message";
|
||||
return false;
|
||||
}
|
||||
if (this->getMqttPublisher()->isValidNode(node)) {
|
||||
return true;
|
||||
}
|
||||
qCWarning(ozwmc) << "Invalid Node in field " << field << " for message " << jmsg.toJson();
|
||||
qCWarning(ozwmc) << "Invalid Node in field " << field << " for message ";
|
||||
return false;
|
||||
}
|
||||
|
||||
bool MqttCommand::checkValue(QJsonDocument jmsg, QString field) {
|
||||
quint64 vidKey = jmsg[field].toInt();
|
||||
bool MqttCommand::checkValue(rapidjson::Document &jmsg, QString field) {
|
||||
if (!jmsg.HasMember(field.toStdString().c_str())) {
|
||||
qCWarning(ozwmc) << "ValueIDKey " << field <<" Is Missing from Message";
|
||||
return false;
|
||||
}
|
||||
if (!jmsg[field.toStdString().c_str()].IsUint64()) {
|
||||
qCWarning(ozwmc) << "ValueIDKey " << field << " Is not a uint64";
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
quint64 vidKey = jmsg[field.toStdString().c_str()].GetUint64();
|
||||
if (vidKey == 0) {
|
||||
qCWarning(ozwmc) << "Invalid VidKey in field " << field << " for message " << jmsg.toJson();
|
||||
qCWarning(ozwmc) << "Invalid VidKey in field " << field << " for message ";
|
||||
return false;
|
||||
}
|
||||
if (this->getMqttPublisher()->isValidValueID(vidKey)) {
|
||||
return true;
|
||||
}
|
||||
qCWarning(ozwmc) << "Invalid VidKey in field " << field << " for message " << jmsg.toJson();
|
||||
qCWarning(ozwmc) << "Invalid VidKey in field " << field << " for message ";
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -162,6 +183,19 @@ bool MqttCommand::setValue(quint64 vidKey, QVariant data) {
|
|||
return this->getMqttPublisher()->setValue(vidKey, data);
|
||||
}
|
||||
|
||||
bool MqttCommand::sendSimpleStatus(bool status, QString error) {
|
||||
rapidjson::Document js;
|
||||
if (status == true) {
|
||||
QT2JS::SetString(js, "status", "ok");
|
||||
} else {
|
||||
QT2JS::SetString(js, "status", "failed");
|
||||
if (!error.isEmpty())
|
||||
QT2JS::SetString(js, "error", error);
|
||||
}
|
||||
emit sendCommandUpdate(GetCommand(), js);
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
MqttCommands::MqttCommands(QObject *parent) :
|
||||
QObject(parent)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue