/* * ===================================================================================== * * Filename: center_main.cc * * Description: * * Version: 1.0 * Created: 2021年04月13日 16时16分26秒 * Revision: none * Compiler: gcc * * Author: Li Chao (), lichao@aiotlink.com * Organization: * * ===================================================================================== */ #include "app_arg.h" #include "box.h" #include "center.h" #include "defs.h" #include "log.h" #include "signalhandle.h" #include #include #include using namespace std::chrono_literals; using namespace bhome_shm; int center_main(int argc, const char *argv[]) { AppArg args(argc, argv); ns_log::AddLog(BHLogDir() + "bhshmq_center.log"); auto lvl = args.Get("log", "info"); if (strcasecmp(lvl.c_str(), "trace") == 0) { ns_log::ResetLogLevel(ns_log::LogLevel::trace); } if (strcasecmp(lvl.c_str(), "debug") == 0) { ns_log::ResetLogLevel(ns_log::LogLevel::debug); } if (strcasecmp(lvl.c_str(), "info") == 0) { ns_log::ResetLogLevel(ns_log::LogLevel::info); } if (strcasecmp(lvl.c_str(), "warning") == 0) { ns_log::ResetLogLevel(ns_log::LogLevel::warning); } if (strcasecmp(lvl.c_str(), "error") == 0) { ns_log::ResetLogLevel(ns_log::LogLevel::error); } if (strcasecmp(lvl.c_str(), "fatal") == 0) { ns_log::ResetLogLevel(ns_log::LogLevel::fatal); } if (!CenterInit()) { auto msg = "init memory failed, or center is already running."; LOG_FATAL() << msg; printf("%s\n", msg); exit(0); } auto &shm = BHomeShm(); GlobalInit(shm); if (args.Has("daemon") || args.Has("d")) { int r = daemon(0, 0); // maybe add center control msg to close itself. } BHCenter center(shm); center.Start(); auto msg = "center (" + shm.name() + ") started ..."; LOG_INFO() << msg; printf("%s\n", msg.c_str()); WaitForSignals({SIGINT, SIGTERM}); center.Stop(); LOG_INFO() << "center stopped."; return 0; } namespace { static bool install = BoxInstall("bhshmq_center", center_main, "bhome center program."); }