56 lines
1.3 KiB
C++
56 lines
1.3 KiB
C++
/*******************************************************************************
|
||
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);
|
||
}
|
||
}
|
||
}
|