in common/pubsub.cpp [30:68]
uint64_t PubSub::readData()
{
redisReply *reply = nullptr;
/* Read data from redis. This call is non blocking. This method
* is called from Select framework when data is available in socket.
* NOTE: All data should be stored in event buffer. It won't be possible to
* read them second time. */
if (redisGetReply(m_subscribe->getContext(), reinterpret_cast<void**>(&reply)) != REDIS_OK)
{
throw std::runtime_error("Unable to read redis reply");
}
m_keyspace_event_buffer.emplace_back(make_shared<RedisReply>(reply));
/* Try to read data from redis cacher.
* If data exists put it to event buffer.
* NOTE: Keyspace event is not persistent and it won't
* be possible to read it second time. If it is not stared in
* the buffer it will be lost. */
reply = nullptr;
int status;
do
{
status = redisGetReplyFromReader(m_subscribe->getContext(), reinterpret_cast<void**>(&reply));
if(reply != nullptr && status == REDIS_OK)
{
m_keyspace_event_buffer.emplace_back(make_shared<RedisReply>(reply));
}
}
while(reply != nullptr && status == REDIS_OK);
if (status != REDIS_OK)
{
throw RedisError("Unable to redisGetReplyFromReader", m_subscribe->getContext());
}
return 0;
}