mirror of
https://github.com/Expand-sys/CCash
synced 2025-12-19 01:22:14 +11:00
✨ implementing change state saving
This commit is contained in:
parent
57a0ab5d54
commit
7aadd63cd5
2 changed files with 40 additions and 41 deletions
5
main.cpp
5
main.cpp
|
|
@ -62,7 +62,10 @@ int main(int argc, char **argv)
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
std::this_thread::sleep_for(std::chrono::minutes(saving_freq));
|
std::this_thread::sleep_for(std::chrono::minutes(saving_freq));
|
||||||
bank.Save();
|
if (bank.GetChangeState())
|
||||||
|
{
|
||||||
|
bank.Save();
|
||||||
|
}
|
||||||
std::cout << "Saving " << std::time(0) << '\n';
|
std::cout << "Saving " << std::time(0) << '\n';
|
||||||
}
|
}
|
||||||
}).detach();
|
}).detach();
|
||||||
|
|
|
||||||
76
src/bank.cpp
76
src/bank.cpp
|
|
@ -1,18 +1,13 @@
|
||||||
#include "bank.h"
|
#include "bank.h"
|
||||||
|
|
||||||
#if CONSERVATIVE_DISK_SAVE
|
#if CONSERVATIVE_DISK_SAVE
|
||||||
void Bank::ChangesMade() noexcept
|
void Bank::ChangesMade() noexcept { return change_flag.store(1, std::memory_order_release); }
|
||||||
{
|
void Bank::ChangesSaved() noexcept { return change_flag.store(1, std::memory_order_release); }
|
||||||
return change_flag.store(1, std::memory_order_release);
|
bool Bank::GetChangeState() noexcept { return change_flag.load(std::memory_order_acquire); }
|
||||||
}
|
#else
|
||||||
void Bank::ChangesSaved() noexcept
|
void Bank::ChangesMade() noexcept { return change_flag.store(1, std::memory_order_release); }
|
||||||
{
|
void Bank::ChangesSaved() noexcept { return change_flag.store(1, std::memory_order_release); }
|
||||||
return change_flag.store(1, std::memory_order_release);
|
bool Bank::GetChangeState() noexcept { return 1; }
|
||||||
}
|
|
||||||
bool Bank::GetChangeState() noexcept
|
|
||||||
{
|
|
||||||
return change_flag.load(std::memory_order_acquire);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int_fast8_t Bank::AddUser(const std::string &name, const std::string &init_pass) noexcept
|
int_fast8_t Bank::AddUser(const std::string &name, const std::string &init_pass) noexcept
|
||||||
|
|
@ -26,13 +21,11 @@ int_fast8_t Bank::AddUser(const std::string &name, const std::string &init_pass)
|
||||||
return ErrorResponse::InvalidRequest;
|
return ErrorResponse::InvalidRequest;
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
std::shared_lock<std::shared_mutex> lock{size_l};
|
||||||
std::shared_lock<std::shared_mutex> lock{size_l};
|
return (users.try_emplace_l(
|
||||||
return (users.try_emplace_l(
|
name, [](User &) {}, init_pass))
|
||||||
name, [](User &) {}, init_pass))
|
? true
|
||||||
? true
|
: ErrorResponse::UserAlreadyExists;
|
||||||
: ErrorResponse::UserAlreadyExists;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
int_fast8_t Bank::AdminAddUser(const std::string &attempt, std::string &&name, uint32_t init_bal, std::string &&init_pass) noexcept
|
int_fast8_t Bank::AdminAddUser(const std::string &attempt, std::string &&name, uint32_t init_bal, std::string &&init_pass) noexcept
|
||||||
{
|
{
|
||||||
|
|
@ -254,30 +247,33 @@ Json::Value Bank::GetLogs(const std::string &name, const std::string &attempt) n
|
||||||
|
|
||||||
void Bank::Save()
|
void Bank::Save()
|
||||||
{
|
{
|
||||||
Json::Value temp;
|
if (GetChangeState())
|
||||||
|
{
|
||||||
|
Json::Value temp;
|
||||||
|
|
||||||
//loading info into json temp
|
//loading info into json temp
|
||||||
{
|
|
||||||
std::scoped_lock<std::shared_mutex, std::shared_mutex> lock{size_l, send_funds_l};
|
|
||||||
for (const auto &u : users)
|
|
||||||
{
|
{
|
||||||
//we know it contains this key but we call this func to grab mutex
|
std::scoped_lock<std::shared_mutex, std::shared_mutex> lock{size_l, send_funds_l};
|
||||||
users.if_contains(u.first, [&temp, &u](const User &u_val) {
|
for (const auto &u : users)
|
||||||
temp[u.first] = u_val.Serialize();
|
{
|
||||||
});
|
//we know it contains this key but we call this func to grab mutex
|
||||||
|
users.if_contains(u.first, [&temp, &u](const User &u_val) {
|
||||||
|
temp[u.first] = u_val.Serialize();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (temp.isNull())
|
||||||
|
{
|
||||||
|
throw std::invalid_argument("Saving Failed\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::ofstream user_save(users_location);
|
||||||
|
Json::StreamWriterBuilder builder;
|
||||||
|
const std::unique_ptr<Json::StreamWriter> writer(builder.newStreamWriter());
|
||||||
|
writer->write(temp, &user_save);
|
||||||
|
user_save.close();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (temp.isNull())
|
|
||||||
{
|
|
||||||
throw std::invalid_argument("Saving Failed\n");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
std::ofstream user_save(users_location);
|
|
||||||
Json::StreamWriterBuilder builder;
|
|
||||||
const std::unique_ptr<Json::StreamWriter> writer(builder.newStreamWriter());
|
|
||||||
writer->write(temp, &user_save);
|
|
||||||
user_save.close();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue