/** * @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 */ #pragma once #include #include #include #include #include #include #include "logger.h" namespace OcBaseDownload { namespace WebSocketInterface { class DataManager; namespace Messages { /** * @brief The ClientMessageFactory class creates ClientMessages which will then be processed */ class ClientMessageFactory final : public LtsWebSocket::AbstractClientMessageFactory { public: explicit ClientMessageFactory(DataManager *dataManager); /** * @brief create Only way to create a ClientMessage object * @param message Text message which will be converted to a ClientMessage object * @return A ClientMessage object, which represents a concrete ClientMessage */ LtsWebSocket::AbstractClientMessage *createMessage(LtsWebSocket::ReplyHandler *client, const QString &message); private: DataManager *m_dataManager; }; // class ClientMessageFactory /** * @brief The ClientMessage class is an abstract base class for concrete ClientMessage objects */ class ClientMessage : public LtsWebSocket::AbstractClientMessage { protected: // method explicit ClientMessage(DataManager *dataManager, LtsWebSocket::ReplyHandler *client, const QString &type, const int typeId, const QString &uuid, const QJsonValue &data = QJsonValue()); protected: // attributes DataManager *m_dataManager; LOGGER_T m_logger; }; // class ClientMessage // ################## Message Implementations ################## class ErrorMessage : public ClientMessage { public: explicit ErrorMessage(DataManager *dataManager, LtsWebSocket::ReplyHandler *client, const QString &type, const int typeId, const QString &uuid, const QJsonValue &data); /** * @brief The ErrorData struct represents the data part of an ErrorMessage object */ struct ErrorData { int errorClass = 0; QString uuid; QString errorMessage; }; void process(); bool hasValidData() const; }; class ServicePortsInformation : public ClientMessage { public: explicit ServicePortsInformation(DataManager *dataManager, LtsWebSocket::ReplyHandler *client, const QString &type, const int typeId, const QString &uuid, const QJsonValue &data); public: /** * @brief The PortInformation struct holds the information what kind of port we have here */ struct PortInformation { int32_t number = 0; int32_t type = 0; }; /** * @brief The ServiceInformation struct information about a service */ struct ServiceInformation { QString name; QString abbreviation; QVector ports; }; /** * @brief The ExerciseInformation struct with information about an exercise (could also be a replay) */ struct ExerciseInformation { int32_t exerciseId = 0; dds::core::optional replayPartitionId; QVector services; }; void process(); bool hasValidData() const; }; // class ServicesInformation /** * @brief Handle a BaseData telegram */ template class BaseData final : public ClientMessage { public: explicit BaseData(DataManager *dataManager, LtsWebSocket::ReplyHandler *client, const QString &type, const int typeId, const QString &uuid, QJsonValue &data); void process(); bool hasValidData() const; }; // class BaseData /** * @brief Handle a PdfListData telegram */ class PdfListMessage : public ClientMessage { public: explicit PdfListMessage(DataManager *dataManager, LtsWebSocket::ReplyHandler *client, const QString &type, const int typeId, const QString &uuid, QJsonValue &data); struct PdfInformation { int32_t id = -1; QString name; int fileSize = -1; FileManagement::FileCategory fileCategory = FileManagement::FileCategory::Global; bool isTemplate = false; QJsonValue properties; FileManagement::FileStatus fileStatus = FileManagement::FileStatus::Deleted; int folderId = -1; int phaseId = -1; int operatorId = -1; int exerciseId = -1; PdfInformation() = default; PdfInformation(int32_t id, const QString &name, int fileSize, FileManagement::FileCategory fileCategory, bool isTemplate, const QJsonValue &properties, FileManagement::FileStatus fileStatus, int folderId, int phaseId, int operatorId, int exerciseId) : id(id) , name(name) , fileSize(fileSize) , fileCategory(fileCategory) , isTemplate(isTemplate) , properties(properties) , fileStatus(fileStatus) , folderId(folderId) , phaseId(phaseId) , operatorId(operatorId) , exerciseId(exerciseId) {} }; struct PdfListData { QVector pdfData; }; void process(); bool hasValidData() const; }; // class PdfListData } // namespace Messages } // namespace WebSocketInterface } // namespace OcBaseDownload