/** * Handler for player data * $Id$ * $HeadURL$ * $Author$ * Created by hjl, SLSE, 2017-02-20 */ #include "handler_ppm_data.h" #include "handler_effect_show_vehicle_status.h" #include "settings.h" using namespace EffectShowManagement; //============================================================================= HandlerPpmData::HandlerPpmData(Initialization *mainHandler, QObject *parent) : QObject(parent) , m_mainHandler(mainHandler) , m_logger(getLogger("HandlerPpmData")) { } // end of ctor() //============================================================================= bool HandlerPpmData::init() { DEBUG_LOG(m_logger) << "Begin HandlerPpmData"; auto dtcPpm = m_mainHandler->dds()->dtcPpm(); connect(dtcPpm.get(), &ParticipantManagement::Interface::Dtc::participantChanged, this, &HandlerPpmData::onParticipantChanged); // Get current data for all Participants { auto cb = [this](const ParticipantManagement::Participant & participant) { onParticipantChanged(participant, DataModification::eAdded); }; if (!dtcPpm->participants(cb)) return false; } DEBUG_LOG(m_logger) << "End HandlerPpmData"; return true; } // end of init() //----------------------------------------------------------------------------- HandlerPpmData::Participant_t HandlerPpmData::getIdAndNameOfEffectShowActor(int equipmentNum) const { for (const HandlerPpmData::Participant_t &p : m_participant) { if (p.equipmentNumber == equipmentNum) return p; } WARNING_LOG(m_logger) << LOGFUNCTION << " Equipment Number not found: " << equipmentNum; return Participant_t(); // participant not available } // end of getIdAndNameOfEffectShowActor() //----------------------------------------------------------------------------- int HandlerPpmData::getEquipmentNumber(int id) const { auto it = m_participant.find(id); if (it == m_participant.end()) { WARNING_LOG(m_logger) << LOGFUNCTION << " Participant(" << id << ") not found. "; return -1; // participant not available } return it.value().equipmentNumber; } // end of getIdAndNameOfEffectShowActor() //----------------------------------------------------------------------------- void HandlerPpmData::onParticipantChanged(const ParticipantManagement::Participant &data, DataModification modType) { if (modType != DataModification::eRemoved) { auto m_ppmDtc = m_mainHandler->dds()->dtcPpm(); ParticipantManagement::TypeClass typeClass = m_ppmDtc->type(data.typeId()).typeClass(); DEBUG_LOG(m_logger) << "support entity / equipment number set " << (typeClass == ParticipantManagement::TypeClass::SupportEntity) << " / " << data.equipmentNumber().is_set() << ", typeId: " << data.typeId() << ", cnt: " << m_ppmDtc->types().size(); if (typeClass != ParticipantManagement::TypeClass::SupportEntity) { // type class does not match, make sure we don't handle it (now) modType = DataModification::eRemoved; } else { // does not exists or has no longer an equipment number -> remove if (!data.equipmentNumber().is_set()) modType = DataModification::eRemoved; } } switch (modType) { case DataModification::eAdded: case DataModification::eModified: { auto &val = m_participant[data.id()]; val = Participant_t(data); m_mainHandler->handlerEffectShowVehicleStatus()->effectShowActorChanged(val, modType); break; } case DataModification::eRemoved: { // remove if participant exists auto it = m_participant.constFind(data.id()); if (it != m_participant.constEnd()) { m_mainHandler->handlerEffectShowVehicleStatus()->effectShowActorChanged(it.value(), modType); m_participant.remove(data.id()); } break; } } DEBUG_LOG(m_logger) << "onParticipantChanged: " << data.id() << ' ' << data.name() << ' ' << modType; } // end of onParticipantChanged()