/** * Handler for infrastructure data * $Id$ * $HeadURL$ * $Author: * Created by Christian Roeskens, NLSE, 2018-05-02 */ #include "handler_equipment_error_registration.h" #include "web_socket_server.h" #include "settings.h" #include "eem_db.h" #include #include #include #include #include #include #include #include using namespace ExerciseEventManagement; HandlerEquipmentErrorRegistration::HandlerEquipmentErrorRegistration(MainHandler *mainHandler, const std::shared_ptr &ddsHandler, const std::shared_ptr &db, const std::shared_ptr &eventServer) : m_mainHandler(mainHandler) , m_ddsHandler(ddsHandler) , m_dbHandler(db) , m_eventServer(eventServer) , m_ossDtc(nullptr) , m_logger(getLogger("HandlerEquipmentErrorRegistration")) { } // end of ctor() //----------------------------------------------------------------------------- HandlerEquipmentErrorRegistration::~HandlerEquipmentErrorRegistration() { } // end of dtor() //----------------------------------------------------------------------------- bool HandlerEquipmentErrorRegistration::init() { INFO_LOG(m_logger) << "start init() DTC OcSituationServer "; // DTC OcSituationServer m_ossDtc = OcSituationServer::Interface::Dtc::create(m_ddsHandler->ddsConnector()); if (m_ossDtc == nullptr) { ERROR_LOG(m_logger) << "Could not create DTC OcSituationServer"; return false; } // Subsribe for EquipmentErrorRegistration connect(m_ossDtc.get(), &OcSituationServer::Interface::Dtc::equipmentErrorRegistrationChanged, this, &HandlerEquipmentErrorRegistration::onEquipmentErrorRegistrationChanged); if (!m_ossDtc->enableEquipmentErrorRegistration()) { ERROR_LOG(m_logger) << "init() DTC OcSituationServer failed"; return false; } return true; } // end of init() //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- void HandlerEquipmentErrorRegistration::onEquipmentErrorRegistrationChanged(const OcSituationServer::EquipmentErrorRegistration &data, DataModification modType) { INFO_LOG(m_logger) << "onEquipmentErrorRegistrationChanged()" << ", equipmentNr: " << data.equipmentNumber() << ", text: " << QString::fromStdString(data.text()); if (modType == DataModification::eRemoved) return; Database::EemEvent eData; eData.sampleTime = data.sampleTime(); eData.equipmentNumber = data.equipmentNumber(); eData.eventTypeId = ProjectDataManagement::EventType_def::EquipmentErrorReport; QJsonObject obj; obj[QStringLiteral("text")] = QString::fromStdString(data.text()); obj[QStringLiteral("device")] = QString::fromStdString(data.device()); obj[QStringLiteral("participant")] = QString::fromStdString(data.participant()); eData.properties = QString::fromUtf8(QJsonDocument(obj).toJson(QJsonDocument::Compact)); if (!m_dbHandler->db()->insert(eData)) ERROR_LOG(m_logger) << "Error while inserting event into database"; else publishData(eData); }// end of onEquipmentErrorRegistrationChanged() //----------------------------------------------------------------------------- void HandlerEquipmentErrorRegistration::publishData(const Database::EemEvent &data) { m_eventServer->sendEvent(Database::toJson(data)); ExerciseEventManagement::Event ddsData = toDdsData(data); if (!m_ddsHandler->dts()->publish(ddsData)) ERROR_LOG(m_logger) << "Error publishing event-data to dds"; // take data from dds-bus after 10s, we need just to make sure the recording service got it m_mainHandler->addEventIdToRemove(ddsData.id()); } ExerciseEventManagement::Event HandlerEquipmentErrorRegistration::toDdsData(const Database::EemEvent &data) { ExerciseEventManagement::Event ddsData; ddsData.id(data.id); ddsData.sampleTime(data.sampleTime); ddsData.participantId(data.participantId); ddsData.partyId(data.partyId); ddsData.equipmentNumber(data.equipmentNumber); ddsData.eventTypeId(data.eventTypeId); ddsData.properties(data.properties.toStdString()); ddsData.position(Core::GeoPosition(data.position.x(), data.position.y(), data.position.z())); return ddsData; }