Distribution_Service/Server/Terminal/Terminal.cpp

84 lines
2.1 KiB
C++
Raw Normal View History

2025-12-03 18:08:23 +08:00
#include "Terminal.h"
#include "BS_Log.h"
#include "CCThread.h"
#include "Config.h"
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<int> Terminal::getTermList() {
const auto list = Term_map.values();
CCVector<int> TermList;
for (const auto &Term : list) {
if (Term) {
TermList.add_lock(Term->ID);
}
}
return TermList;
}
CCVector<Terminal> Terminal::getTermList_T() {
CCVector<Terminal> 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();
}