86 lines
2.4 KiB
C++
86 lines
2.4 KiB
C++
#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_
|