#ifndef MYX_REDIS_BASE_HPP_ #define MYX_REDIS_BASE_HPP_ #pragma once #include #include #include QT_FORWARD_DECLARE_CLASS( QTimer ) QT_FORWARD_DECLARE_CLASS( QTcpSocket ) namespace myx { namespace redis { /*! * \brief Базовый класс для объектов взаимодействия с redis */ class Base : public QObject { Q_OBJECT public: /*! * \brief Состояние соединения */ enum ConnectionStateFlags { kDisconnected = 1, //!< Соединение не установлено kConnecting = 2, //!< Соединение устанавливается kConnected = 4, //!< Соединение установлено kRead = 8, //!< Есть данные для чтения kWrite = 16, //!< Есть данные для записи kError = 32, //!< Ошибка соединения }; explicit Base( QObject* parent = nullptr ); /*! * \brief Сигнализирует об изменении состояния соединения * \param flags Флаги состояния */ Q_SIGNAL void connectionStateChanged( int flags ); bool isConnected() const; private: static constexpr int k_RwTimeout { 200 }; //!< Таймаут на операции чтения и записи int m_connectionFlags { kDisconnected }; //!< Флаги состояния соединения quint16 m_port { 6379 }; //!< Номер порта подключения к БД QString m_host { QStringLiteral( "127.0.0.1" ) }; //!< Имя хоста подключения к БД QTimer* m_readTimer; //!< Таймер чтения данных QTimer* m_writeTimer; //!< Таймер записи данных protected: int connectionTimeout() const; int rwTimeout() const; QString host() const; void setHost( const QString& host ); quint16 port() const; void setPort( quint16 port ); int connectionFlags() const; void setConnectionFlags( int connectionFlags ); // int fetchLength( QByteArray& buffer, int& pos ); Q_SLOT void onReadyRead(); Q_SLOT void onBytesWritten(); Q_SLOT void onSocketError(); }; // class Base } // namespace redis } // namespace myx #ifdef MYXLIB_HEADER_ONLY #include "base-inl.hpp" #endif #endif // ifndef MYX_REDIS_BASE_HPP_