Пример клиента для Redis
This commit is contained in:
		@@ -1,89 +0,0 @@
 | 
			
		||||
#include <QObject>
 | 
			
		||||
#include <QDebug>
 | 
			
		||||
 | 
			
		||||
#include <myx/redis/client.hpp>
 | 
			
		||||
 | 
			
		||||
namespace MR = myx::redis;
 | 
			
		||||
 | 
			
		||||
class RedisClient : public QObject
 | 
			
		||||
{
 | 
			
		||||
	Q_OBJECT
 | 
			
		||||
 | 
			
		||||
	MR::Client m_client;
 | 
			
		||||
	MR::Client   m_subscribe;
 | 
			
		||||
	MR::Request* m_request;
 | 
			
		||||
	MR::Request* m_channel;
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
	RedisClient( QObject* parent = nullptr ) :
 | 
			
		||||
		QObject( parent )
 | 
			
		||||
	{
 | 
			
		||||
		connect( &m_client, &MR::Client::connected, this, &RedisClient::slotConnected );
 | 
			
		||||
		connect( &m_subscribe, &MR::Client::connected, this, &RedisClient::slotStartSubscribe );
 | 
			
		||||
		m_client.connectToHost( "127.0.0.1" );
 | 
			
		||||
		m_subscribe.connectToHost( "127.0.0.1" );
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	virtual ~RedisClient() {}
 | 
			
		||||
 | 
			
		||||
	Q_SLOT void slotStartSubscribe()
 | 
			
		||||
	{
 | 
			
		||||
		m_channel = m_subscribe.subscribeToChannel( "test" );
 | 
			
		||||
		connect( m_channel, &MR::Request::reply, this, &RedisClient::slotSubscribeTest );
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	Q_SLOT void slotSubscribeTest( MR::Reply reply )
 | 
			
		||||
	{
 | 
			
		||||
		qDebug() << static_cast< int >( reply.type() );
 | 
			
		||||
		auto& v = reply.value();
 | 
			
		||||
		if ( !v.canConvert< QVariantList >() ) { return; }
 | 
			
		||||
 | 
			
		||||
		auto l = v.toList();
 | 
			
		||||
		for ( auto& a: l )
 | 
			
		||||
		{
 | 
			
		||||
			qDebug() << a.value< MR::Reply >().value().toByteArray();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	Q_SLOT void slotConnected()
 | 
			
		||||
	{
 | 
			
		||||
		m_request = m_client.sendCommand( "PING" );
 | 
			
		||||
		connect( m_request, &MR::Request::reply, this, &RedisClient::slotPong );
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	Q_SLOT void slotPong( MR::Reply reply )
 | 
			
		||||
	{
 | 
			
		||||
		qDebug() << static_cast< int >( reply.type() );
 | 
			
		||||
		qDebug() << reply.value().toString();
 | 
			
		||||
		m_request->disconnect();
 | 
			
		||||
		m_request->deleteLater();
 | 
			
		||||
 | 
			
		||||
		m_request = m_client.sendCommand( "SET value 10" );
 | 
			
		||||
		connect( m_request, &MR::Request::reply, this, &RedisClient::slotSetValue );
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	Q_SLOT void slotSetValue( MR::Reply reply )
 | 
			
		||||
	{
 | 
			
		||||
		qDebug() << static_cast< int >( reply.type() );
 | 
			
		||||
		qDebug() << reply.value().toString();
 | 
			
		||||
		m_request->disconnect();
 | 
			
		||||
		m_request->deleteLater();
 | 
			
		||||
 | 
			
		||||
		m_request = m_client.sendCommand( "GET value" );
 | 
			
		||||
		connect( m_request, &MR::Request::reply, this, &RedisClient::slotGetValue );
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	Q_SLOT void slotGetValue( MR::Reply reply )
 | 
			
		||||
	{
 | 
			
		||||
		qDebug() << static_cast< int >( reply.type() );
 | 
			
		||||
		qDebug() << reply.value().toByteArray();
 | 
			
		||||
		m_request->disconnect();
 | 
			
		||||
		m_request->deleteLater();
 | 
			
		||||
	}
 | 
			
		||||
}; // class RedisClient
 | 
			
		||||
@@ -60,8 +60,9 @@ endif()
 | 
			
		||||
if(MYXLIB_BUILD_EXAMPLES_HO)
 | 
			
		||||
  set(REDIS_LIB_DIR ${CMAKE_SOURCE_DIR}/src/myx/redis)
 | 
			
		||||
 | 
			
		||||
  set(REDIS_moc_hpp ${REDIS_LIB_DIR}/client.hpp ${REDIS_LIB_DIR}/lexer.hpp ${REDIS_LIB_DIR}/parser.hpp
 | 
			
		||||
                    ${REDIS_LIB_DIR}/request.hpp)
 | 
			
		||||
  set(REDIS_moc_hpp ${REDIS_LIB_DIR}/base.hpp
 | 
			
		||||
                    ${REDIS_LIB_DIR}/containers.hpp
 | 
			
		||||
                    ${REDIS_LIB_DIR}/pubsub.hpp)
 | 
			
		||||
 | 
			
		||||
  qt5_wrap_cpp(REDIS_moc_cpp ${REDIS_moc_hpp})
 | 
			
		||||
 | 
			
		||||
@@ -1,12 +1,19 @@
 | 
			
		||||
#include "client.hpp"
 | 
			
		||||
 | 
			
		||||
#include <myx/redis/pubsub.hpp>
 | 
			
		||||
 | 
			
		||||
#include <QCoreApplication>
 | 
			
		||||
#include <QDebug>
 | 
			
		||||
 | 
			
		||||
namespace MR = myx::redis;
 | 
			
		||||
 | 
			
		||||
int main( int argc, char** argv )
 | 
			
		||||
{
 | 
			
		||||
	QCoreApplication app( argc, argv );
 | 
			
		||||
	RedisClient client;
 | 
			
		||||
 | 
			
		||||
	MR::PubSub  a;
 | 
			
		||||
	RedisClient c( &a );
 | 
			
		||||
	a.start();
 | 
			
		||||
 | 
			
		||||
	return( QCoreApplication::exec() );
 | 
			
		||||
} // main
 | 
			
		||||
							
								
								
									
										32
									
								
								examples/redis/01_client/client.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								examples/redis/01_client/client.hpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
#include <QObject>
 | 
			
		||||
#include <QDebug>
 | 
			
		||||
 | 
			
		||||
 #include <myx/redis/pubsub.hpp>
 | 
			
		||||
 | 
			
		||||
namespace MR = myx::redis;
 | 
			
		||||
 | 
			
		||||
class RedisClient : public QObject
 | 
			
		||||
{
 | 
			
		||||
	Q_OBJECT
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
	explicit RedisClient( MR::PubSub* p, QObject* o = nullptr ) :
 | 
			
		||||
		QObject( o )
 | 
			
		||||
	{
 | 
			
		||||
		p->subscribe( "test", this, "readChannelTest" );
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	Q_INVOKABLE void readChannelTest( const QString& channel, const QByteArray& message )
 | 
			
		||||
	{
 | 
			
		||||
		qDebug() << channel;
 | 
			
		||||
		qDebug() << message;
 | 
			
		||||
 | 
			
		||||
		if ( message == "quit" )
 | 
			
		||||
		{
 | 
			
		||||
			qCritical() << message;
 | 
			
		||||
			qApp->quit();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}; // class RedisClient
 | 
			
		||||
		Reference in New Issue
	
	Block a user