mirror of
https://github.com/Expand-sys/CCash
synced 2025-12-17 00:22:14 +11:00
🎨 made save results from Save()
This commit is contained in:
parent
f87ec947b6
commit
518c1b1203
3 changed files with 45 additions and 51 deletions
|
|
@ -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();
|
||||||
};
|
};
|
||||||
37
main.cpp
37
main.cpp
|
|
@ -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
|
||||||
|
|
|
||||||
57
src/bank.cpp
57
src/bank.cpp
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue