🎨 made save results from Save()

This commit is contained in:
EntireTwix 2021-07-10 12:09:01 -07:00
parent f87ec947b6
commit 518c1b1203
3 changed files with 45 additions and 51 deletions

View file

@ -63,6 +63,6 @@ public:
BankResponse AddUser(const std::string &name, uint32_t init_bal, std::string &&init_pass) noexcept; BankResponse AddUser(const std::string &name, uint32_t init_bal, std::string &&init_pass) noexcept;
BankResponse DelUser(const std::string &name) noexcept; BankResponse DelUser(const std::string &name) noexcept;
void Save(); const char *Save();
void Load(); void Load();
}; };

View file

@ -21,16 +21,8 @@ static Bank bank;
void SaveSig(int s) void SaveSig(int s)
{ {
std::cout << "\nSaving on close...\n"; std::cout << "\nSaving on close...\n"
if (bank.GetChangeState()) << bank.Save();
{
std::cout << " to disk...\n";
bank.Save();
}
else
{
std::cout << " no changes...\n";
}
exit(1); exit(1);
} }
@ -87,23 +79,14 @@ int main(int argc, char **argv)
const unsigned long saving_freq = std::stoul(std::string(argv[2])); const unsigned long saving_freq = std::stoul(std::string(argv[2]));
if (saving_freq) //if saving frequency is 0 then auto saving is turned off if (saving_freq) //if saving frequency is 0 then auto saving is turned off
{ {
std::thread([saving_freq]() std::thread([saving_freq]() {
{ while (1)
while (1) {
{ std::this_thread::sleep_for(std::chrono::minutes(saving_freq));
std::this_thread::sleep_for(std::chrono::minutes(saving_freq)); std::cout << "Saving " << std::time(0) << "...\n"
std::cout << "Saving " << std::time(0) << "...\n"; << bank.Save();
if (bank.GetChangeState()) }
{ })
std::cout << " to disk...\n";
bank.Save();
}
else
{
std::cout << " no changes...\n";
}
}
})
.detach(); .detach();
} }
} //destroying setup variables } //destroying setup variables

View file

@ -263,37 +263,48 @@ BankResponse Bank::DelUser(const std::string &name) noexcept
return {k404NotFound, "\"User not found\""}; return {k404NotFound, "\"User not found\""};
} }
} }
void Bank::Save() const char *Bank::Save()
{ {
static thread_local Json::Value temp; #if CONSERVATIVE_DISK_SAVE
if (GetChangeState())
{
#endif
return " to disk...\n";
//loading info into json temp static thread_local Json::Value temp;
{
std::unique_lock<std::shared_mutex> lock{save_lock}; //loading info into json temp
for (const auto &u : users)
{ {
//we know it contains this key but we call this func to grab mutex std::unique_lock<std::shared_mutex> lock{save_lock};
users.if_contains(u.first, [&u](const User &u_val) { temp[u.first] = u_val.Serialize(); }); for (const auto &u : users)
{
//we know it contains this key but we call this func to grab mutex
users.if_contains(u.first, [&u](const User &u_val) { temp[u.first] = u_val.Serialize(); });
}
} }
} if (temp.isNull())
if (temp.isNull()) {
{ throw std::invalid_argument("Saving Failed\n");
throw std::invalid_argument("Saving Failed\n"); }
else
{
static thread_local std::ofstream user_save(users_location);
static thread_local Json::StreamWriterBuilder builder;
static thread_local const std::unique_ptr<Json::StreamWriter> writer(builder.newStreamWriter());
writer->write(temp, &user_save);
user_save.close();
}
#if CONSERVATIVE_DISK_SAVE
#if MULTI_THREADED
save_flag.SetChangesOff();
#else
save_flag = true;
#endif
} }
else else
{ {
static thread_local std::ofstream user_save(users_location); return " no changes...\n";
static thread_local Json::StreamWriterBuilder builder;
static thread_local const std::unique_ptr<Json::StreamWriter> writer(builder.newStreamWriter());
writer->write(temp, &user_save);
user_save.close();
} }
#if CONSERVATIVE_DISK_SAVE
#if MULTI_THREADED
save_flag.SetChangesOff();
#else
save_flag = true;
#endif
#endif #endif
} }