/** * @RDE_HEADER@ * The ClientMessage class is an abstract base class for concrete ClientMessage objects * $Id$ * $HeadURL$ * $Author$ * Created by Philipp Dassow, SLST, 2017-12-05 */ #include "client_message.h" #include "WebSocketInterface/Messages/reply_message.h" #include "WebSocketInterface/json_keys.h" #include "WebSocketInterface/data_manager.h" #include #include namespace OcSituationClient { namespace WebSocketInterface { namespace Messages { using namespace JsonKeys; // ####### ClientMessageFactory begin ####### ClientMessageFactory::ClientMessageFactory(DataManager *dataManager) : LtsWebSocket::AbstractClientMessageFactory(getLogger("ClientMessageFactory")) , m_dataManager(dataManager) {} ClientMessageFactory::~ClientMessageFactory() {} LtsWebSocket::AbstractClientMessage *ClientMessageFactory::createMessage(LtsWebSocket::ReplyHandler *client, const QString &message) { LtsWebSocket::AbstractClientMessage *result = checkAttributes(client, message); if (result) return result; if (m_type == ServiceManagement::WebSocketInterface::JsonKeys::SERVICE_PORTS_INFORMATION()) result = new ServicePortsInformation(m_dataManager, client, m_type, m_uuid, m_data); return checkResult(client, message, result); } // ####### ClientMessageFactory end ####### // ####### ClientMessage begin ####### ClientMessage::ClientMessage(DataManager *dataManager, LtsWebSocket::ReplyHandler *client, const QString &type, const QString &uuid, const QJsonValue &data) : LtsWebSocket::AbstractClientMessage(client, type, uuid, data) , m_dataManager(dataManager) {} // ####### ClientMessage end ####### // ####### ServicesInformation begin ####### ServicePortsInformation::ServicePortsInformation(DataManager *dataManager, LtsWebSocket::ReplyHandler *client, const QString &type, const QString &uuid, const QJsonValue &data) : ClientMessage (dataManager,client, type, uuid, data) {} void ServicePortsInformation::process() { QJsonArray exerciseInformationArray = m_data.toArray(); QVector exercises; QVector services; QVector ports; exercises.reserve(exerciseInformationArray.size()); for (const auto &exerciseJsonValue : exerciseInformationArray) { QJsonObject exerciseJsonObject = exerciseJsonValue.toObject(); ExerciseInformation exercise; exercise.exerciseId = exerciseJsonObject.value(ServiceManagement::WebSocketInterface::JsonKeys::EXERCISE_ID()).toInt(); if (exerciseJsonObject.find(ServiceManagement::WebSocketInterface::JsonKeys::REPLAY_PARTITION_ID()) != exerciseJsonObject.end()) exercise.replayPartitionId = dds::core::optional(exerciseJsonObject.value(ServiceManagement::WebSocketInterface::JsonKeys::REPLAY_PARTITION_ID()).toInt()); QJsonArray servicesJsonArray = exerciseJsonObject.value(ServiceManagement::WebSocketInterface::JsonKeys::SERVICES()).toArray(); // prepare vector services.clear(); services.reserve(servicesJsonArray.size()); for (const auto &serviceValue : servicesJsonArray) { ServiceInformation service; QJsonObject serviceObject = serviceValue.toObject(); service.name = serviceObject.value(ServiceManagement::WebSocketInterface::JsonKeys::NAME()).toString(); service.abbreviation = serviceObject.value(ServiceManagement::WebSocketInterface::JsonKeys::NAME_ABBR()).toString(); QJsonArray portsJsonArray = serviceObject.value(ServiceManagement::WebSocketInterface::JsonKeys::PORTS()).toArray(); // prepare vector ports.clear(); ports.reserve(portsJsonArray.size()); for (const auto &portValue : portsJsonArray) { QJsonObject portObject = portValue.toObject(); PortInformation port; port.number = portObject.value(ServiceManagement::WebSocketInterface::JsonKeys::NUMBER()).toInt(); port.type = portObject.value(ServiceManagement::WebSocketInterface::JsonKeys::TYPE_ID()).toInt(); ports.append(port); } service.ports = ports; services.append(service); } exercise.services = services; exercises.append(exercise); } m_dataManager->servicePortsInformation(exercises); } bool ServicePortsInformation::hasValidData() const { return true; } // ####### ServicesInformation end ####### } // namespace Messages } // namespace WebSocketInterface } // namespace OcSituationClient