lichao
2021-06-01 72851db66655912cb9c92300a80985fb9797d168
box/center_main.cc
@@ -19,6 +19,7 @@
#include "box.h"
#include "center.h"
#include "defs.h"
#include "log.h"
#include "signalhandle.h"
#include <boost/interprocess/sync/named_mutex.hpp>
#include <chrono>
@@ -44,13 +45,13 @@
         return true;
      }
      auto mtx(shm_.find_or_construct<Mutex>((name_ + "_mutex_0").c_str())());
      auto time_stamp(shm_.find_or_construct<int64_t>((name_ + "_timestamp_0").c_str())(0));
      auto mtx(shm_.FindOrCreate<Mutex>(name_ + "_mutex_0"));
      auto time_stamp(shm_.FindOrCreate<int64_t>(name_ + "_timestamp_0", 0));
      if (mtx && time_stamp) {
         Guard lock(*mtx);
         auto now = NowSec();
         // printf("old: %ld, now: %ld\n", *time_stamp, now);
         LOG_DEBUG() << "old: " << *time_stamp << ", now: " << now;
         if (now > *time_stamp + 10) {
            *time_stamp = now;
            auto UpdateTime = [this, time_stamp]() {
@@ -85,17 +86,35 @@
} // namespace
int center_main(int argc, const char *argv[])
{
   auto &shm = BHomeShm();
   AppArg args(argc, argv);
   if (args.Has("remove")) {
      shm.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); }
   auto &shm = BHomeShm();
   if (!CenterInit(shm)) {
      auto msg = "init memory error.";
      LOG_FATAL() << msg;
      printf("%s\n", msg);
      exit(0);
   }
   GlobalInit(shm);
   InstanceFlag inst(shm, kCenterRunningFlag);
   if (!inst.TryStartAsFirstInstance()) {
      printf("another instance is running, exit.\n");
      auto msg = "another instance is running, exit.";
      LOG_INFO() << msg;
      printf("%s\n", msg);
      return 0;
   }
@@ -106,8 +125,12 @@
   BHCenter center(shm);
   center.Start();
   printf("center started ...\n");
   auto msg = "center started ...";
   LOG_INFO() << msg;
   printf("%s\n", msg);
   WaitForSignals({SIGINT, SIGTERM});
   center.Stop();
   LOG_INFO() << "center stopped.";
   return 0;
}