JD2022-TU1/main/extern/Hue/libhuestream/huestream/connect/FileStorageAccessor.cpp

56 lines
1.3 KiB
C++
Raw Blame History

/*******************************************************************************
Copyright <20> 2017 Philips Lighting Holding B.V.
All Rights Reserved.
********************************************************************************/
#include "FileStorageAccessor.h"
#include <fstream>
#include <sstream>
namespace huestream
{
FileStorageAccessor::FileStorageAccessor(const string& fileName) : _fileName(fileName)
{
}
void FileStorageAccessor::Load(BridgeLoadCallbackHandler cb)
{
std::fstream file;
file.open(_fileName.c_str(), std::fstream::in);
if (file.is_open())
{
std::ostringstream contents;
contents << file.rdbuf();
file.close();
JSONNode node = libjson::parse(contents.str());
auto s = Serializable::DeserializeFromJson(&node);
auto bridge = std::static_pointer_cast<Bridge>(s);
cb(OPERATION_SUCCESS, bridge);
}
else
{
cb(OPERATION_FAILED, std::make_shared<Bridge>());
}
}
void FileStorageAccessor::Save(BridgePtr bridge, BridgeSaveCallbackHandler cb)
{
JSONNode node;
bridge->Serialize(&node);
std::ofstream file;
file.open(_fileName.c_str(), std::fstream::out | std::fstream::trunc);
if (file.is_open())
{
std::string jc = node.write_formatted();
std::ostringstream contents(jc);
file << contents.str();
file.close();
cb(OPERATION_SUCCESS);
}
else
{
cb(OPERATION_FAILED);
}
}
}