/** * Send a function topic to TrainingAreabase in a specific exercise * $Id$ * $HeadURL$ * $Author$ * Created by Christian Ehrlicher, SLSE, 2016-12-13 */ #include "exercise_handler.h" namespace Messaging { ExerciseHandler::ExerciseHandler(const std::shared_ptr &ddsConnector, const int exerciseId) : m_ddsConnector(std::make_shared(ddsConnector->getDomainId(), IDL::PartitionType::Exercise, exerciseId)) , m_exerciseId(exerciseId) , m_idleTimer(new QTimer(this)) , m_logger(getLogger("ExerciseHandler")) { connect(m_idleTimer, &QTimer::timeout, this, &ExerciseHandler::exerciseHandlerIdleTimeout); m_idleTimer->setSingleShot(true); m_idleTimer->setInterval(60 * 60 * 1000); // 1h } bool ExerciseHandler::init() { m_ddsConnector->initPublisherSubscriber(); DEBUG_LOG(m_logger) << "ExerciseHandler::init m_ddsConnector=" << m_ddsConnector << " m_exerciseId=" << m_exerciseId; m_tabFtc = TrainingAreaBase::Interface::Ftc::create(m_ddsConnector); bool retVal = m_tabFtc->enableSendEquipmentMessage(); if (!retVal) return false; m_ossFtc = OcSituationServer::Interface::Ftc::create(m_ddsConnector); retVal = m_ossFtc->enableSendEquipmentMessageOc(); return retVal; } bool ExerciseHandler::sendEquipmentMessage(const TrainingAreaBase::SendEquipmentMessageRequest &request) { if (!m_tabFtc) return false; DEBUG_LOG(m_logger) << "ExerciseHandler::sendEquipmentMessage: " << request; m_idleTimer->stop(); return m_tabFtc->sendEquipmentMessageRequest(request, this); } bool ExerciseHandler::sendOcEquipmentMessage(const OcSituationServer::SendEquipmentMessageRequest &request) { if (!m_ossFtc) return false; DEBUG_LOG(m_logger) << "ExerciseHandler::sendOcEquipmentMessage: "<< request; m_idleTimer->stop(); return m_ossFtc->sendEquipmentMessageOcRequest(request, this); } int ExerciseHandler::exerciseId() const { return m_exerciseId; } void ExerciseHandler::onSendEquipmentMessageReply(const Core::FunctionReplyObject &replyObject) { DEBUG_LOG(m_logger)<<"ExerciseHandler::onSendEquipmentMessageReply"; m_idleTimer->start(); if (replyObject.error()) ERROR_LOG(m_logger) << replyObject(); emit equipmentMessageReply(replyObject.id(), !replyObject.error()); } void ExerciseHandler::onSendEquipmentMessageOcReply(const Core::FunctionReplyObject &replyObject) { DEBUG_LOG(m_logger)<<"ExerciseHandler::onSendEquipmentMessageOcReply"; m_idleTimer->start(); if (replyObject.error()) ERROR_LOG(m_logger) << replyObject(); emit equipmentMessageOcReply(replyObject.id(), !replyObject.error()); } } // namespace Messaging