diff --git a/include/log_consts.hpp b/include/log_consts.hpp index 55dc7f5..cd84770 100644 --- a/include/log_consts.hpp +++ b/include/log_consts.hpp @@ -1,5 +1,5 @@ #pragma once // `max_log_size` must be divisible by `pre_log_size` -constexpr auto max_log_size = 100; // Setting to 0 does not compile logging -constexpr auto pre_log_size = 10; +constexpr unsigned max_log_size = 100; // Setting to 0 does not compile logging +constexpr unsigned pre_log_size = 10; diff --git a/main.cpp b/main.cpp index 652fcad..6b687f9 100644 --- a/main.cpp +++ b/main.cpp @@ -23,54 +23,61 @@ void SaveSig(int s) int main(int argc, char **argv) { static_assert(pre_log_size <= max_log_size, "`max_log_size` must be larger than `pre_log_size`."); - static_assert(!(max_log_size % pre_log_size) + (!max_log_size), "`max_log_size` must be a multiple of `pre_log_size`."); - - if (argc != 4) + if constexpr (!(max_log_size % pre_log_size) && max_log_size) { - std::cerr << "Usage: sudo ./bank \n"; + std::cerr << "`max_log_size` must be a multiple of `pre_log_size`.\n"; return 0; } - if (geteuid() != 0) + else { - std::cerr << "ERROR: CCash MUST be ran as root\n"; - return 0; + + if (argc != 4) + { + std::cerr << "Usage: sudo ./bank \n"; + return 0; + } + if (geteuid() != 0) + { + std::cerr << "ERROR: CCash MUST be ran as root\n"; + return 0; + } + + //Loading users from users.json + bank.Load(); + + //Sig handling + struct sigaction sigIntHandler; + + sigIntHandler.sa_handler = SaveSig; + sigemptyset(&sigIntHandler.sa_mask); + sigIntHandler.sa_flags = 0; + + sigaction(SIGINT, &sigIntHandler, NULL); + + //Admin Password + bank.admin_pass = argv[1]; + + //Auto Saving + const unsigned long saving_freq = std::stoul(argv[2]); + if (saving_freq) //if saving frequency is 0 then auto saving is turned off + { + std::thread([saving_freq]() { + while (1) + { + std::this_thread::sleep_for(std::chrono::minutes(saving_freq)); + bank.Save(); + std::cout << "Saving " << duration_cast(system_clock::now().time_since_epoch()).count() << '\n'; + } + }).detach(); + } + + auto API = std::make_shared(); + app().registerPostHandlingAdvice( + [](const drogon::HttpRequestPtr &req, const drogon::HttpResponsePtr &resp) { + resp->addHeader("Access-Control-Allow-Origin", "*"); + }); + app().loadConfigFile("../config.json").registerController(API).setThreadNum(std::stoul(argv[3])).run(); } - //Loading users from users.json - bank.Load(); - - //Sig handling - struct sigaction sigIntHandler; - - sigIntHandler.sa_handler = SaveSig; - sigemptyset(&sigIntHandler.sa_mask); - sigIntHandler.sa_flags = 0; - - sigaction(SIGINT, &sigIntHandler, NULL); - - //Admin Password - bank.admin_pass = argv[1]; - - //Auto Saving - const unsigned long saving_freq = std::stoul(argv[2]); - if (saving_freq) //if saving frequency is 0 then auto saving is turned off - { - std::thread([saving_freq]() { - while (1) - { - std::this_thread::sleep_for(std::chrono::minutes(saving_freq)); - bank.Save(); - std::cout << "Saving " << duration_cast(system_clock::now().time_since_epoch()).count() << '\n'; - } - }).detach(); - } - - auto API = std::make_shared(); - app().registerPostHandlingAdvice( - [](const drogon::HttpRequestPtr &req, const drogon::HttpResponsePtr &resp) { - resp->addHeader("Access-Control-Allow-Origin", "*"); - }); - app().loadConfigFile("../config.json").registerController(API).setThreadNum(std::stoul(argv[3])).run(); - return 0; }