/** * MainHandler for ExerciseManagement * $Id$ * $HeadURL$ * $Author$ */ #include "main_handler.h" #include "asset_assignment_manager.h" #include "av_control.h" #include "fm_control.h" #include "exercises_handler.h" #include "dds_handler.h" #include "handler_menu_struct.h" #include "handler_frequency_planning_status.h" #include "tvc_handler.h" #include "cnr_handler.h" #include "frequency_set_handler.h" #include "frequency_planning_handler.h" #include "cnr_tvc_profile_handler.h" #include "active_exercises.h" #include "stream_name_mapping_publisher.h" #include "settings.h" #include "handler_video_team.h" #include "handler_video_receiver.h" #include #include #include #include #include #include using namespace AudioVideoManagement; MainHandler::MainHandler(QObject *parent) : QObject(parent) , m_logger(getLogger("MainHandler")) {} MainHandler::~MainHandler() = default; bool MainHandler::init(int domainId) { // initialize database m_dbHandler.reset(new DbHandler()); if (!m_dbHandler->init(0, Settings::settings())) { ERROR_LOG(m_logger) << "Initialisation dbHandler failed."; return false; } m_dbInterface = m_dbHandler->db(); // initialize DDS m_ddsHandler.reset(new DdsHandler(domainId)); if (!m_ddsHandler->init()) { ERROR_LOG(m_logger) << "Initialisation ddsHandler failed."; return false; } m_avControl.reset(new AVControl(NGL::Connections::hostName(NGL::Connections::eConnection::AVS_ROOT), NGL::Connections::port(NGL::Connections::eConnection::AVS_ROOT))); m_avControl->connectToAVS(); m_fmControl.reset(new FMControl(NGL::Connections::hostName(NGL::Connections::eConnection::AVS_FM), NGL::Connections::port(NGL::Connections::eConnection::AVS_FM))); m_fmControl->connectToAVS(); // The ExercisesHandler must be initialized *before* Tvc- and CnrHandler // as the ExercisesHandler clears (and refills) the device_config. // Tvc- and CnrHandler also fill the device_config. m_exHandler.reset(new ExercisesHandler(this)); // init() called below... m_activeExercises.reset(new ActiveExercises(m_exHandler.get())); m_videoTeamHandler.reset(new HandlerVideoTeam(m_ddsHandler->dts(), m_ddsHandler->fts(), m_dbInterface.get(), m_activeExercises.get())); connect(m_videoTeamHandler.get(), &HandlerVideoTeam::avDbReloadNeeded, m_exHandler.get(), &ExercisesHandler::onAvDbReloadNeeded); if (!m_videoTeamHandler->init()) { ERROR_LOG(m_logger) << "Initialisation HandlerVideoTeam failed."; m_ddsHandler->pacemaker()->setNewState(Core::RunningState::StartingError); return false; } m_frequencyPlanningStatusHandler.reset(new HandlerFrequencyPlanningStatus(m_ddsHandler->dts(), m_ddsHandler->fts(), m_dbInterface.get())); if (!m_frequencyPlanningStatusHandler->init()) { ERROR_LOG(m_logger) << "Initialisation HandlerFrequencyPlanningStatus failed."; m_ddsHandler->pacemaker()->setNewState(Core::RunningState::StartingError); return false; } // init() called here as it requires the HandlerVideoTeam which can only be created after ExercisesHandler if (!m_exHandler->init()) return false; m_menuStructHandler.reset(new HandlerMenuStruct(m_ddsHandler->dts(), m_ddsHandler->fts(), m_dbInterface.get())); if (!m_menuStructHandler->init()) return false; m_tvcHandler.reset(new TvcHandler(m_ddsHandler->dts(), m_ddsHandler->fts(), m_dbInterface.get(), m_activeExercises.get())); connect(m_tvcHandler.get(), &TvcHandler::avDbReloadNeeded, m_exHandler.get(), &ExercisesHandler::onAvDbReloadNeeded); if (!m_tvcHandler->init()) { ERROR_LOG(m_logger) << "Initialisation tvcHandler failed"; m_ddsHandler->pacemaker()->setNewState(Core::RunningState::StartingError); return false; } m_frequencySetHandler.reset(new FrequencySetHandler(m_ddsHandler->dts(), m_dbInterface.get())); if (!m_frequencySetHandler->init()) { ERROR_LOG(m_logger) << "Initialisation FrequencySetHandler failed"; m_ddsHandler->pacemaker()->setNewState(Core::RunningState::StartingError); return false; } m_frequencyPlanningHandler.reset(new FrequencyPlanningHandler(m_ddsHandler->dts(), m_ddsHandler->fts(), m_dbInterface.get(), m_frequencySetHandler.get(), m_activeExercises.get())); // init() done below because there is a circular dependency with CnrHandler m_cnrHandler.reset(new CnrHandler(m_ddsHandler->dts(), m_ddsHandler->fts(), m_ddsHandler->ismDtc(), m_frequencyPlanningHandler.get(), m_dbInterface.get(), m_activeExercises.get())); connect(m_cnrHandler.get(), &CnrHandler::avDbReloadNeeded, m_exHandler.get(), &ExercisesHandler::onAvDbReloadNeeded); m_frequencyPlanningHandler->setCnrHandler(m_cnrHandler.get()); if (!m_frequencyPlanningHandler->init()) { ERROR_LOG(m_logger) << "Initialisation FrequencyPlanningHandler failed"; m_ddsHandler->pacemaker()->setNewState(Core::RunningState::StartingError); return false; } if (!m_cnrHandler->init()) { ERROR_LOG(m_logger) << "Initialisation cnrHandler failed"; m_ddsHandler->pacemaker()->setNewState(Core::RunningState::StartingError); return false; } m_cnrTvcProfileHandler.reset(new CnrTvcProfileHandler(m_dbInterface.get(), m_ddsHandler->dts(), m_ddsHandler->fts(), m_cnrHandler.get(), m_tvcHandler.get())); if (!m_cnrTvcProfileHandler->init()) { ERROR_LOG(m_logger) << "Initialisation RadioCircuitsHandler failed"; m_ddsHandler->pacemaker()->setNewState(Core::RunningState::StartingError); return false; } m_streamNameMappingPublisher.reset(new StreamNameMappingPublisher(m_ddsHandler->ismDtc(), m_ddsHandler->dts())); // initialize handler video receiver m_videoReceiverHandler.reset(new HandlerVideoReceiver(this, m_ddsHandler->dts(), m_ddsHandler->fts(), m_dbInterface.get())); if (!m_videoReceiverHandler->init()) { ERROR_LOG(m_logger) << "Initialisation HandlerVideoReceiver failed."; m_ddsHandler->pacemaker()->setNewState(Core::RunningState::StartingError); return false; } if (!m_ddsHandler->enableDtcClients()) { ERROR_LOG(m_logger) << "Initialisation DTCs failed."; m_ddsHandler->pacemaker()->setNewState(Core::RunningState::StartingError); return false; } m_ddsHandler->pacemaker()->setNewState(Core::RunningState::Running); return true; } int MainHandler::exerciseId() { if (ddsHandler()) return ddsHandler()->ddsConnector()->getPartitionId(); return -1; }