изменил логику подключения к API

This commit is contained in:
Vladislav Ostapov 2024-11-29 13:36:39 +03:00
parent 1f8ea04f43
commit 3e4ffc8281
2 changed files with 38 additions and 26 deletions

View File

@ -201,12 +201,35 @@ private:
void run() { void run() {
// это демон, который в бесконечном цикле опрашивает API // это демон, который в бесконечном цикле опрашивает API
CP_GetNetwork(sid, "version", &firmware.version); {
CP_GetNetwork(sid, "chip_id", &firmware.modemId); TSID sid{};
rtrim(firmware.modemId); unsigned int access{};
CP_GetNetwork(sid, "serial", &firmware.modemSn); for (int connectAttempt = 0;; connectAttempt++) {
CP_GetNetwork(sid, "mac_eth0", &firmware.macMang); BOOST_LOG_TRIVIAL(info) << "api_driver::ApiDriver::startDaemon(): Try to connect api (attempt " << connectAttempt << ")...";
CP_GetNetwork(sid, "mac_eth1", &firmware.macData); auto res = CP_Login("admin", "pass", &sid, &access);
if (res != OK) {
boost::this_thread::sleep_for(boost::chrono::duration(boost::chrono::milliseconds(1000)));
} else {
break;
}
}
std::string tmp;
CP_GetDmaDebug(sid, "status_init", &tmp);
{
std::lock_guard _lock(this->stateMutex);
this->deviceInitState = tmp;
}
BOOST_LOG_TRIVIAL(info) << "api_driver::ApiDriver::startDaemon(): Success connect!";
BOOST_LOG_TRIVIAL(info) << "api_driver::ApiDriver::startDaemon(): API status: " << tmp;
CP_GetNetwork(sid, "version", &firmware.version);
CP_GetNetwork(sid, "chip_id", &firmware.modemId);
rtrim(firmware.modemId);
CP_GetNetwork(sid, "serial", &firmware.modemSn);
CP_GetNetwork(sid, "mac_eth0", &firmware.macMang);
CP_GetNetwork(sid, "mac_eth1", &firmware.macData);
}
struct IntervalUpdate_t { struct IntervalUpdate_t {
int64_t lastUpdate; int64_t lastUpdate;
@ -290,6 +313,7 @@ private:
modulator_state modState{}; modulator_state modState{};
demodulator_state demodState{}; demodulator_state demodState{};
device_state devState{}; device_state devState{};
std::string deviceInitState;
#ifdef MODEM_IS_SCPC #ifdef MODEM_IS_SCPC
CinC_state cincState{}; CinC_state cincState{};
#endif #endif
@ -317,10 +341,15 @@ public:
TerminalFirmwareVersion firmware; TerminalFirmwareVersion firmware;
explicit TerminalApiDaemon(TSID sid): qosEnabled(false), sid(sid), daemon([this]() { this->run(); }) { explicit TerminalApiDaemon(): deviceInitState("Not connected to API"), qosEnabled(false), sid(0), daemon([this]() { this->run(); }) {
this->qosClassesJson = DEFAULT_QOS_CLASSES; this->qosClassesJson = DEFAULT_QOS_CLASSES;
} }
std::string getDeviceInitState() {
std::shared_lock lock(this->stateMutex);
return this->deviceInitState;
}
#ifdef MODEM_IS_SCPC #ifdef MODEM_IS_SCPC
/** /**
* Получение статистики, копирует текущие значения в структуры, переданные по указателю. Если передан пустой указатель, копирования не произойдет. * Получение статистики, копирует текущие значения в структуры, переданные по указателю. Если передан пустой указатель, копирования не произойдет.
@ -557,23 +586,7 @@ api_driver::ApiDriver::ApiDriver() = default;
void api_driver::ApiDriver::startDaemon() { void api_driver::ApiDriver::startDaemon() {
if (daemon == nullptr) { if (daemon == nullptr) {
TSID sid{}; daemon = std::make_unique<TerminalApiDaemon>();
unsigned int access{};
for (int connectAttempt = 0; connectAttempt <= 10; connectAttempt++) {
BOOST_LOG_TRIVIAL(info) << "api_driver::ApiDriver::startDaemon(): Try to connect api (attempt " << connectAttempt << ")...";
auto res = CP_Login("admin", "pass", &sid, &access);
if (res != OK) {
boost::this_thread::sleep_for(boost::chrono::duration(boost::chrono::milliseconds(1000)));
} else {
break;
}
}
CP_GetDmaDebug(sid, "status_init", &deviceInitState);
BOOST_LOG_TRIVIAL(info) << "api_driver::ApiDriver::startDaemon(): Success connect!";
BOOST_LOG_TRIVIAL(info) << "api_driver::ApiDriver::startDaemon(): API status: " << deviceInitState;
daemon = std::make_unique<TerminalApiDaemon>(sid);
BOOST_LOG_TRIVIAL(info) << "api_driver::ApiDriver::startDaemon(): API daemon succes started!"; BOOST_LOG_TRIVIAL(info) << "api_driver::ApiDriver::startDaemon(): API daemon succes started!";
} }
} }
@ -619,7 +632,7 @@ std::string api_driver::ApiDriver::loadTerminalState() const {
} }
std::stringstream result; std::stringstream result;
result << "{\n\"initState\":" << buildEscapedString(this->deviceInitState); result << "{\n\"initState\":" << buildEscapedString(daemon->getDeviceInitState());
modulator_state modulator{}; modulator_state modulator{};
demodulator_state demodulator{}; demodulator_state demodulator{};

View File

@ -73,7 +73,6 @@ namespace api_driver {
~ApiDriver(); ~ApiDriver();
private: private:
std::string deviceInitState;
std::unique_ptr<TerminalApiDaemon> daemon; std::unique_ptr<TerminalApiDaemon> daemon;
}; };
} }