/*
|
* =====================================================================================
|
*
|
* 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 <boost/interprocess/sync/named_mutex.hpp>
|
#include <chrono>
|
#include <thread>
|
using namespace std::chrono_literals;
|
using namespace bhome_shm;
|
|
int center_main(int argc, const char *argv[])
|
{
|
AppArg args(argc, argv);
|
if (args.Has("remove")) {
|
SharedMemory::Remove(BHomeShmName());
|
return 0;
|
}
|
|
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); // TODO 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.");
|
}
|