myxlib/src/myx/redis/base.hpp

86 lines
2.4 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef MYX_REDIS_BASE_HPP_
#define MYX_REDIS_BASE_HPP_
#pragma once
#include <myx/base/config.hpp>
#include <QHash>
#include <QObject>
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_