#include "Terminal.h" #include "BS_Log.h" #include "CCThread.h" #include "Config.h" CTL::Map Terminal::Term_map; void Terminal::upStatus() { const auto Setting = Config::getConfig(); while (Setting->Flag) { const auto list = getTermList(); for (const auto& ID : list) { const auto Term = getData(ID); if (Term) { if (Term->Heartbeat >= 2) { Term->Heartbeat = 0; if (Term->Status == 0) { Term->Status = 1; BS_Log::Log("upStatus TermID: {} is ONLINE", ID); } } else { Term->Heartbeat = 0; if (Term->Status == 1) { Term->Status = 0; BS_Log::Warning("upStatus TermID: {} is OFFLINE", ID); } } } } CTL::Thread::SleepMS(12 * 1000); } } void Terminal::Init() { CTL::Thread::addTask(upStatus); } Terminal * Terminal::getData(const int ID) { const auto it = Term_map.get(ID); if (it && *it) { const auto Term = *it; return Term; } return nullptr; } void Terminal::addData(Terminal *data) { Term_map.put(data->ID, data); } CCVector Terminal::getTermList() { const auto list = Term_map.values(); CCVector TermList; for (const auto &Term : list) { if (Term) { TermList.add_lock(Term->ID); } } return TermList; } CCVector Terminal::getTermList_T() { CCVector list_t; const auto List = getTermList(); for (const auto &ID : List) { const auto Term = getData(ID); if (Term) { list_t.push_back(*Term); } } return list_t; } CTL::String Terminal::toTermInfo() { const auto Setting = Config::getConfig(); CTL::JSONObject Json = {}; const auto List = getTermList_T(); Json.put("ID",Setting->ID); Json.put("Name", Setting->Name); Json.put("ListLength", List.size()); Json.put("TermList", List); return Json.to_String(); }