/** * NgsHandler for HighLevelArchitecture * $Id$ * $HeadURL$ * $Author$ * Created by Christian Ehrlicher, SLSE, 2017-04-07 */ #include "ngs_handler.h" #include "ngs_connector.h" #include #include #include #include namespace HighLevelArchitecture { NgsHandler::NgsHandler(QObject *parent) : QObject(parent) , m_ddsHandler(nullptr) , m_logger(getLogger("NgsHandler")) {} NgsHandler::~NgsHandler() { m_ppmHandler = nullptr; m_aesHandler = nullptr; m_ngsConnector = nullptr; m_ddsHandler = nullptr; } bool NgsHandler::init(const std::shared_ptr &ddsHandler) { // initialize DDS m_ddsHandler = ddsHandler; QMap protToStr; protToStr.insert(ngs::IObserver::ProtocolType::DIS, QStringLiteral("DIS")); protToStr.insert(ngs::IObserver::ProtocolType::HLA, QStringLiteral("HLA")); protToStr.insert(ngs::IObserver::ProtocolType::CORBANOTIFY, QStringLiteral("CORBA")); ngs::IObserver::ProtocolType protocol = Settings::hlaProtocol(); INFO_LOG(m_logger) << "Protocol = " << protToStr.value(protocol, QStringLiteral("UNKNOWN")); m_ngsConnector = /* (protocol == ngs::IObserver::ProtocolType::DIS) ? std::make_shared(Settings::federationName(), this) : */ std::make_shared(Settings::federationName(), this); connect(m_ngsConnector.get(), &NgsConnector::firstTickFinished, this, &NgsHandler::onFirstTickFinished, Qt::UniqueConnection); return m_ngsConnector->initialize(protocol, QHostInfo::localHostName().toUpper(), QCoreApplication::applicationDirPath()); } bool NgsHandler::isConnectedToHla() const { return m_ngsConnector && m_ngsConnector->canPublishData(); } void NgsHandler::onFirstTickFinished() { m_ppmHandler = std::make_shared(this); m_aesHandler = std::make_shared(this); if (!m_ppmHandler->init()) ERROR_LOG(m_logger) << "Could not init ppm handler - not able to publish participants to HLA"; if (!m_aesHandler->init()) ERROR_LOG(m_logger) << "Could not init ppm handler - not able to publish area effect simulations to HLA"; emit firstTickFinished(); connect(m_ppmHandler.get(), &PpmHandler::externalEquipmentNumberAdded, this, &NgsHandler::externalEquipmentNumberAdded); connect(m_ppmHandler.get(), &PpmHandler::externalEquipmentNumberRemoved, this, &NgsHandler::externalEquipmentNumberRemoved); connect(this, &NgsHandler::participantInitRequest, m_ppmHandler.get(), &PpmHandler::participantInitRequest); connect(this, &NgsHandler::participantBiteRequest, m_ppmHandler.get(), &PpmHandler::participantBiteRequest); emit ngsHandlerReady(); } } // namespace HighLevelArchitecture