#pragma once #include "client_message.h" #include "ltswebsocketcommon_export.h" #include "reply_message.h" #include #include namespace NGL { class INGLLogger; } namespace LtsWebSocket { class LTSWEBSOCKETCOMMON_EXPORT AbstractClientMessageFactory { public: explicit AbstractClientMessageFactory(NGL::INGLLogger& logger) : m_logger(logger) {} virtual ~AbstractClientMessageFactory() {} QJsonParseError parseMessage(const QString& message); virtual AbstractClientMessage* createMessage(ReplyHandler* client, const QString& message) = 0; protected: AbstractClientMessage* checkAttributes(ReplyHandler* client, const QString& message) const; AbstractClientMessage* checkResult(ReplyHandler* client, const QString& message, AbstractClientMessage* result) const; protected: NGL::INGLLogger& m_logger; QString m_type; int m_typeId; QString m_uuid; QJsonValue m_data; }; class PongMessage final : public ReplyMessage { public: static QString strPong() { return QStringLiteral("pong"); } static int idPong() { return 2; } explicit PongMessage(const QString& payload) : ReplyMessage(strPong(), idPong(), QString()), m_payload(payload) {} QString toJsonString() const override { return m_payload.isEmpty() ? strPong() : QStringLiteral("%1 %2").arg(strPong(), m_payload); } private: QString m_payload; }; } // namespace LtsWebSocket