133 lines
4.5 KiB
C++
Executable File
133 lines
4.5 KiB
C++
Executable File
/**
|
|
* 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 <OcSituationServer/oss.hpp>
|
|
|
|
#include <ProjectDataManagement/pdm_enums.hpp>
|
|
|
|
#include <QSet>
|
|
#include <QtCore/QThread>
|
|
#include <QJsonArray>
|
|
#include <QJsonObject>
|
|
#include <QJsonDocument>
|
|
|
|
#include <QTimer>
|
|
|
|
using namespace ExerciseEventManagement;
|
|
|
|
HandlerEquipmentErrorRegistration::HandlerEquipmentErrorRegistration(MainHandler *mainHandler,
|
|
const std::shared_ptr<DdsHandler> &ddsHandler,
|
|
const std::shared_ptr<DbHandler> &db,
|
|
const std::shared_ptr<WebSocketEventServer> &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;
|
|
}
|