/** * MainHandler for ExerciseManagement * $Id$ * $HeadURL$ * $Author$ */ #include "main_handler.h" #include #include "handler_exercise.h" #include "handler_exercise_phase.h" #include "settings.h" #include #include #include namespace ExerciseManagement { MainHandler::MainHandler(QObject *parent) : QObject(parent) , m_logger(getLogger("MainHandler")) {} MainHandler::~MainHandler() { m_handlerExercisePhases = nullptr; m_handlerExercise = nullptr; m_websocketHandler = nullptr; m_exTblGen = nullptr; m_dbHandler = nullptr; m_ddsHandler = nullptr; } bool MainHandler::init(int domainId) { // initialize DDS m_ddsHandler = std::make_shared(domainId); if (!m_ddsHandler->init()) { ERROR_LOG(m_logger) << "Initialisation ddsHandler failed."; return false; } // initialize database m_dbHandler = std::make_shared(); if (!m_dbHandler->init(0, Settings::settings())) { ERROR_LOG(m_logger) << "Initialisation dbHandler failed."; return false; } // initialize DbAdministration if (!initDbAdminstration()) { ERROR_LOG(m_logger) << "Initialisation dbAdministration failed."; return false; } //create all global schemas + tables m_exTblGen->executeSql(); // read project specific data from database // publish project specific data // initialize the specific handler if (!initExerciseHandler()) return false; if (!initExercisePhaseHandler()) return false; if (!initWebSocketHandler()) return false; m_ddsHandler->pacemaker()->setNewState(Core::RunningState::Running); return true; } bool MainHandler::initDbAdminstration() { // xmlPath const QString xmlPath = NGL::directory(NGL::FileType::ConfigFile, QLatin1String("xml")); m_exTblGen = std::make_shared(getLogger("ExerciseTableGenerator"), xmlPath); connect(m_exTblGen.get(), &DBAdministration::ExerciseTableGenerator::aliveSignal, this, &MainHandler::sendKeepAlive); DEBUG_LOG(m_logger) << "Initialise DbAdmin "; if (!m_exTblGen->init(m_dbHandler->db()->database(), m_dbHandler->db()->schemaName())) { ERROR_LOG(m_logger) << "Initialisation dbAdminHandler failed."; return false; } return true; } bool MainHandler::initExerciseHandler() { m_handlerExercise.reset(new HandlerExercise(this, m_ddsHandler, m_dbHandler->db(), m_exTblGen)); DEBUG_LOG(m_logger) << "Initialise ExerciseHandler "; if (!m_handlerExercise->init()) { ERROR_LOG(m_logger) << "Initialisation ExerciseHandler failed."; return false; } return true; } bool MainHandler::initExercisePhaseHandler() { m_handlerExercisePhases.reset(new HandlerExercisePhase(this, m_ddsHandler, m_dbHandler->db())); DEBUG_LOG(m_logger) << "Initialise ExercisePhaseHandler "; if (!m_handlerExercisePhases->init()) { ERROR_LOG(m_logger) << "Initialisation ExercisePhaseHandler failed."; return false; } return true; } bool MainHandler::initWebSocketHandler() { m_websocketHandler = std::make_shared(this); DEBUG_LOG(m_logger) << "Initialise WebSocketInterfaceHandler"; if (!m_websocketHandler->init()) { ERROR_LOG(m_logger) << "Initialisation WebSocketInterfaceHandler failed."; return false; } m_ddsHandler->pacemaker()->addPort(m_websocketHandler->webSocketPort(), Core::PortType::WebSocketServer); return true; } void MainHandler::sendKeepAlive() { m_ddsHandler->pacemaker()->publishState(); } } // namespace ExerciseManagement