/** * MainHandler for RecordingManagement * $Id$ * $HeadURL$ * $Author$ */ #include "main_handler.h" #include "settings.h" #include "handler_dynamic_participant_data.h" #include "handler_participant_event.h" #include "handler_equipment_error_registration.h" #include "web_socket_avs.h" #include "web_socket_server.h" #include #include #include #include #include namespace ExerciseEventManagement { MainHandler::MainHandler() : m_almService(nullptr) , m_fltService(nullptr) , m_mrkService(nullptr) , m_evlService(nullptr) , m_removeTimer(new QTimer(this)) , m_logger(getLogger("MainHandler")) { connect(m_removeTimer, &QTimer::timeout, this, &MainHandler::onRemoveKeys); m_removeTimer->setInterval(5000); m_removeTimer->setSingleShot(false); m_removeTimer->start(); } MainHandler::~MainHandler() { delete m_almService; delete m_fltService; delete m_mrkService; delete m_evlService; m_webSocketAvs = nullptr; m_webSocketEventServer = nullptr; m_handlerEerEvent = nullptr; m_handlerPartEvent = nullptr; m_dynPartData = nullptr; m_avmDtc = nullptr; m_ismDtc = nullptr; m_ddsHandler = nullptr; m_dbHandler = nullptr; } bool MainHandler::init(int domainId, int exerciseId) { bool bRet = initInternal(domainId, exerciseId); if (bRet) { INFO_LOG(m_logger) << "svcExerciseEventManagement successfully initialized"; m_ddsHandler->setRunningState(Core::RunningState::Running); } else { ERROR_LOG(m_logger) << "Error initializing svcExerciseEventManagement..."; if (m_ddsHandler) m_ddsHandler->setRunningState(Core::RunningState::StartingError); } return bRet; } bool MainHandler::initInternal(int domainId, int exerciseId) { // initialize database m_dbHandler = std::make_shared(); if (!m_dbHandler->init(exerciseId, Settings::settings())) return false; // initialize DDS m_ddsHandler = std::make_shared(domainId, exerciseId, IDL::PartitionType::Exercise); if (!m_ddsHandler->init()) return false; m_webSocketEventServer = std::make_shared(m_dbHandler->db()->database()); if (!m_ismDtc) m_ismDtc = InfrastructureManagement::Interface::Dtc::create(m_ddsHandler->ddsConnector()); m_ismDtc->enableMainStructureElement(); if (!m_avmDtc) m_avmDtc = AudioVideoManagement::Interface::Dtc::create(m_ddsHandler->ddsConnector()); m_avmDtc->enableStreamName(); m_dynPartData = std::make_shared(this, m_ddsHandler, m_dbHandler, m_webSocketEventServer); m_handlerPartEvent = std::make_shared(this, m_ddsHandler, m_dbHandler, m_webSocketEventServer); m_handlerEerEvent = std::make_shared(this, m_ddsHandler, m_dbHandler, m_webSocketEventServer); m_webSocketAvs = std::make_shared(this, m_ddsHandler, m_dbHandler, m_webSocketEventServer, m_avmDtc, m_ismDtc, exerciseId); m_webSocketAvs->setWsUrl(Settings::getWebSocketUrl()); m_webSocketAvs->init(); m_almService = new AlarmManagement::Initialization; if (!m_almService->initialize(m_ddsHandler->ddsConnector(), m_dbHandler->db()->database())) return false; m_fltService = new FilterManagement::Initialization; if (!m_fltService->initialize(m_ddsHandler->ddsConnector(), m_dbHandler->db()->database())) return false; m_mrkService = new MarkerManagement::Initialization; if (!m_mrkService->initialize(m_ddsHandler->ddsConnector(), m_dbHandler->db()->database())) return false; m_evlService = new Evaluations::Initialization; if (!m_evlService->initialize(m_ddsHandler->ddsConnector(), m_dbHandler->db()->database()) || !m_evlService->loadFromDatabase()) return false; if (!loadFromDatabase()) return false; if (!m_almService->loadFromDatabase()) return false; if (!m_fltService->loadFromDatabase()) return false; if (!m_mrkService->loadFromDatabase()) return false; return true; } bool MainHandler::loadFromDatabase() { if (!m_webSocketEventServer || !m_webSocketEventServer->listen(Settings::getWebSocketServerPortRange(1))) { ERROR_LOG(m_logger) << "Can not initialize WebSocket Event server"; return false; } m_ddsHandler->addPortToPacemaker(m_webSocketEventServer->listenPort(), Core::PortType::WebSocketServer); if (!m_handlerEerEvent || !m_handlerEerEvent->init()) { ERROR_LOG(m_logger) << "Can not initialize EquipmentErrorRegistration handler"; return false; } if (!m_dynPartData || !m_dynPartData->init()) { ERROR_LOG(m_logger) << "Can not initialize Participant Data handler"; return false; } if (!m_handlerPartEvent || !m_handlerPartEvent->init()) { ERROR_LOG(m_logger) << "Can not initialize Participant Event handler"; return false; } DEBUG_LOG(m_logger) << "loadFromDatabase successfully finished"; return true; } void MainHandler::addEventIdToRemove(qint64 id) { m_keysToRemove[time(nullptr)].push_back(id); } void MainHandler::onRemoveKeys() { auto dts = m_ddsHandler->dts(); qint64 toRemove = time(nullptr) - 10; auto it = m_keysToRemove.begin(); while (it != m_keysToRemove.end() && it.key() < toRemove) { const auto &cont = it.value(); for (const auto id : cont) dts->removeEventByKey(id); it = m_keysToRemove.erase(it); } } } // ExerciseEventManagement