in common/pubsub.cpp [85:127]
MessageResultPair PubSub::get_message_internal(double timeout, bool interrupt_on_signal)
{
MessageResultPair ret;
if (!m_subscribe)
{
ret.first = Select::ERROR;
return ret;
}
Selectable *selected;
int rc = m_select.select(&selected, int(timeout * 1000), interrupt_on_signal);
ret.first = rc;
switch (rc)
{
case Select::ERROR:
throw RedisError("Failed to select", m_subscribe->getContext());
case Select::TIMEOUT:
case Select::SIGNALINT:
return ret;
case Select::OBJECT:
break;
default:
throw logic_error("Unexpected select result");
}
// Now we have some data to read
auto event = popEventBuffer();
if (!event)
{
return ret;
}
auto message = event->getReply<RedisMessage>();
ret.second["type"] = message.type;
ret.second["pattern"] = message.pattern;
ret.second["channel"] = message.channel;
ret.second["data"] = message.data;
return ret;
}