1
0
mirror of https://github.com/binary-kitchen/doorlockd synced 2024-11-16 03:59:11 +01:00

Improved Clientmessage

- Added Clientmessage::fromJson
- Improved JSON key handling
This commit is contained in:
Ralf Ramsauer 2015-09-25 00:38:34 +02:00
parent aa79228e47
commit b9dc2f5ee1
2 changed files with 47 additions and 4 deletions

View File

@ -1,6 +1,12 @@
#include <json/json.h> #include <json/json.h>
#include "clientmessage.h" #include "clientmessage.h"
#include "util.h"
const std::string Clientmessage::_tokenKey = "token";
const std::string Clientmessage::_unlockButtonKey = "unlockButton";
const std::string Clientmessage::_lockButtonKey = "lockButton";
const std::string Clientmessage::_emergencyUnlockKey = "emergencyUnlock";
Clientmessage::Clientmessage(std::string token, Clientmessage::Clientmessage(std::string token,
Doormessage doormessage) : Doormessage doormessage) :
@ -14,10 +20,38 @@ std::string Clientmessage::toJson() const
Json::StyledWriter writer; Json::StyledWriter writer;
Json::Value message; Json::Value message;
message["token"] = _token; message[_tokenKey] = _token;
message["unlockButton"] = _doormessage.isUnlockButton; message[_unlockButtonKey] = _doormessage.isUnlockButton;
message["lockButton"] = _doormessage.isLockButton; message[_lockButtonKey] = _doormessage.isLockButton;
message["emergencyUnlock"] = _doormessage.isEmergencyUnlock; message[_emergencyUnlockKey] = _doormessage.isEmergencyUnlock;
return writer.write(message); return writer.write(message);
} }
const std::string& Clientmessage::token() const
{
return _token;
}
const Doormessage& Clientmessage::doormessage() const
{
return _doormessage;
}
Clientmessage Clientmessage::fromJson(const std::string &json)
{
Json::Reader reader;
Json::Value root;
std::string token;
Doormessage doormessage;
if (reader.parse(json, root) == false)
throw std::runtime_error("Error parsing JSON");
token = getJsonOrFail<std::string>(root, _tokenKey);
doormessage.isLockButton = getJsonOrFail<bool>(root, _lockButtonKey);
doormessage.isUnlockButton = getJsonOrFail<bool>(root, _unlockButtonKey);
doormessage.isEmergencyUnlock = getJsonOrFail<bool>(root, _emergencyUnlockKey);
return Clientmessage(token, doormessage);
}

View File

@ -13,12 +13,21 @@ public:
Clientmessage(std::string token, Clientmessage(std::string token,
Doormessage doormessage); Doormessage doormessage);
static Clientmessage fromJson(const std::string &json);
std::string toJson() const; std::string toJson() const;
const std::string& token() const;
const Doormessage& doormessage() const;
private: private:
std::string _token; std::string _token;
Doormessage _doormessage; Doormessage _doormessage;
static const std::string _tokenKey;
const static std::string _unlockButtonKey;
const static std::string _lockButtonKey;
const static std::string _emergencyUnlockKey;
}; };
#endif #endif