#include "initialization.h" #include "settings.h" #include "dds_handler.h" #include "handler_nasat_aircraft.h" #include "handler_nasat_aircraft_participant.h" #include "handler_nasat_impact.h" #include "handler_nasat_nine_liner.h" #include "handler_participant.h" #include "tcp_socket_handler.h" #include "web_socket_handler.h" #include #include #include #include namespace GuezNasat { Initialization::Initialization() : m_logger(getLogger("Initialization")) { } Initialization::~Initialization() { m_jsonSocketHandler = nullptr; m_handlerNasatAircraft = nullptr; m_handlerNasatAircraftParticipant = nullptr; m_handlerNasatImpact = nullptr; m_handlerNasatNineLiner = nullptr; m_handlerParticipant = nullptr; m_ddsHandler = nullptr; m_dbHandler = nullptr; } bool Initialization::initialize(const std::shared_ptr &ddsConnector, const QSqlDatabase &) { INFO_LOG(m_logger) << "Start GuezNasat Initialization."; m_ddsHandler = std::make_shared(ddsConnector); if (!m_ddsHandler->init()) { ERROR_LOG(m_logger) << "Initialisation DdsHandler failed."; return false; } m_dbHandler = std::make_shared(); if (!m_dbHandler->init(ddsConnector->getPartitionId(), Settings::settings())) { ERROR_LOG(m_logger) << "Initialisation DbHandler failed."; return false; } m_handlerNasatAircraft.reset(new HandlerNasatAircraft(this)); m_handlerNasatAircraftParticipant.reset(new HandlerNasatAircraftParticipant(this)); m_handlerNasatNineLiner.reset(new HandlerNasatNineLiner(this)); m_handlerNasatImpact.reset(new HandlerNasatImpact(this)); m_handlerParticipant.reset(new HandlerParticipant(this)); if (Settings::useWebSocket()) { INFO_LOG(m_logger) << "Using WebSocket"; m_jsonSocketHandler.reset(new WebSocketHandler); } else { INFO_LOG(m_logger) << "Using TcpSocket"; m_jsonSocketHandler.reset(new TcpSocketHandler); } INFO_LOG(m_logger) << "GuezNasat Initialization initialized"; return true; } bool Initialization::loadFromDatabase() { TRACE_LOG(m_logger) << Q_FUNC_INFO << "START"; if (!m_ddsHandler || !m_dbHandler || !m_handlerNasatAircraft || !m_handlerNasatAircraftParticipant || !m_handlerNasatImpact || !m_handlerNasatNineLiner || !m_handlerParticipant || !m_jsonSocketHandler) return false; if (!m_handlerNasatAircraft->init()) { ERROR_LOG(m_logger) << "Initialisation HandlerNasatAircraft failed."; return false; } if (!m_handlerNasatAircraftParticipant->init()) { ERROR_LOG(m_logger) << "Initialisation HandlerNasatAircraftParticipant failed."; return false; } if (!m_handlerNasatImpact->init()) { ERROR_LOG(m_logger) << "Initialisation HandlerNasatImpact failed."; return false; } if (!m_handlerNasatNineLiner->init()) { ERROR_LOG(m_logger) << "Initialisation HandlerNasatNineLiner failed."; return false; } if (!m_handlerParticipant->init()) { ERROR_LOG(m_logger) << "Initialisation ParticipantPositionPublisher failed."; return false; } #define START_DELAYED #ifdef START_DELAYED QTimer::singleShot(31000, m_jsonSocketHandler.get(), [this]() { NOTICE_LOG(m_logger) << "Initialisation SocketHandler ...."; if (!m_jsonSocketHandler->init(Settings::socketListenPort())) { ERROR_LOG(m_logger) << "Initialisation WebSocketHandler failed."; } }); #else if (!m_jsonSocketHandler->init(Settings::socketListenPort())) { ERROR_LOG(m_logger) << "Initialisation WebSocketHandler failed."; return false; } #endif QObject::connect(m_jsonSocketHandler.get(), &AbstractSocketHandler::simulationStatusReceived, m_handlerNasatAircraft.get(), &HandlerNasatAircraft::simulationStatusChanged); QObject::connect(m_handlerNasatAircraft.get(), &HandlerNasatAircraft::activateNasatAircraftSimulation, m_jsonSocketHandler.get(), &AbstractSocketHandler::setSimulationStatus); QObject::connect(m_handlerNasatAircraft.get(), &HandlerNasatAircraft::nasatIdChanged, m_handlerParticipant.get(), &HandlerParticipant::onNasatIdChanged); QObject::connect(m_jsonSocketHandler.get(), &AbstractSocketHandler::positionReceived, m_handlerParticipant.get(), &HandlerParticipant::onNasatPosition); QObject::connect(m_jsonSocketHandler.get(), &AbstractSocketHandler::weaponReleaseReceived, m_handlerNasatImpact.get(), &HandlerNasatImpact::nasatWeaponRelease); QObject::connect(m_jsonSocketHandler.get(), &AbstractSocketHandler::nineLinerReceived, m_handlerNasatNineLiner.get(), &HandlerNasatNineLiner::nineLinerReceived); TRACE_LOG(m_logger) << Q_FUNC_INFO << "END"; return true; } std::shared_ptr Initialization::db() const { return m_dbHandler->db(); } }