diff --git a/src/command.cpp b/src/command.cpp index 777ec668a7a10de88ff7eaab67b49e86fc8763c1..6d8571308682de62f806deb6d1245d6b35555ac1 100644 --- a/src/command.cpp +++ b/src/command.cpp @@ -75,6 +75,8 @@ Command Command::fromString(const QString& source) return parseAuthenticate(rootobj); case Action::storeToken: return parseStoreToken(rootobj); + case Action::updateExperimentState: + return parseUpdateExperimentState(rootobj); case Action::sendHistogramUpdate: case Action::moveTargetCloser: case Action::moveTargetFarther: @@ -88,7 +90,6 @@ Command Command::fromString(const QString& source) return parseError(rootobj); // Not yet implemented: case Action::queryServerInformation: - case Action::updateExperimentState: case Action::updateHistogram: case Action::setTargetState: case Action::fillHistogram: @@ -183,6 +184,29 @@ Protocol::Command Protocol::Command::parseError(const QJsonObject& input) ); } +Protocol::Command Protocol::Command::parseUpdateExperimentState(const QJsonObject& input) +{ + if ( + !input.keys().contains(QStringLiteral("action")) || !input.value(QStringLiteral("action")).isString() + || !input.keys().contains(QStringLiteral("adcstate")) || !input.value(QStringLiteral("adcstate")).isString() + || !input.keys().contains(QStringLiteral("adcthreshold")) || !input.value(QStringLiteral("adcthreshold")).isString() + || !input.keys().contains(QStringLiteral("beamhole")) || !input.value(QStringLiteral("beamhole")).isString() + || !input.keys().contains(QStringLiteral("pressurehPa")) || !input.value(QStringLiteral("pressurehPa")).isString() + || !input.keys().contains(QStringLiteral("targetposition")) || !input.value(QStringLiteral("targetposition")).isString() + || !input.keys().contains(QStringLiteral("token")) || !input.value(QStringLiteral("token")).isString() + || !input.keys().contains(QStringLiteral("vacuumvalve")) || !input.value(QStringLiteral("vacuumvalve")).isString() + ) { + logError(QStringLiteral("At least one property of the updateExperimentState command is missing or not a string.")); + return Command(); + } + + return Command( + Action::updateExperimentState, + Arguments{std::make_pair(QStringLiteral("adcstate"), input.value(QStringLiteral("adcstate")).toString()), std::make_pair(QStringLiteral("adcthreshold"), input.value(QStringLiteral("adcthreshold")).toString()), std::make_pair(QStringLiteral("beamhole"), input.value(QStringLiteral("beamhole")).toString()), std::make_pair(QStringLiteral("pressurehPa"), input.value(QStringLiteral("pressurehPa")).toString()), std::make_pair(QStringLiteral("targetposition"), input.value(QStringLiteral("targetposition")).toString()), std::make_pair(QStringLiteral("vacuumvalve"), input.value(QStringLiteral("vacuumvalve")).toString())}, + input.value(QStringLiteral("token")).toString() + ); +} + QString Command::toString() const { if (action == Action::invalid) diff --git a/src/command.h b/src/command.h index 0fd7830b22c91827ec264590fef2fa3c9b0ff3e5..d87819ca333563819df5b1a8a1a2e6afa5143d95 100644 --- a/src/command.h +++ b/src/command.h @@ -72,6 +72,7 @@ private: static Command parseAuthenticate(const QJsonObject& input); static Command parseStoreToken(const QJsonObject& input); static Command parseError(const QJsonObject& input); + static Command parseUpdateExperimentState(const QJsonObject& input); static QString getActionString(const Action action); };