#pragma once #include "client_message.h" #include "reply_message.h" #include #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: QString m_type; int m_typeId; QString m_uuid; QJsonValue m_data; NGL::INGLLogger &m_logger; }; 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; }; }