/* static */ void SubscriberConsumeCallback::timerComplete(const SubscriberClientChannelHandlerPtr handler, const PubSubResponsePtr m, const boost::system::error_code& error) { if (error) { return; } handler->messageReceived(handler->getChannel(), m); }
void SubscriberImpl::consume(const std::string& topic, const std::string& subscriberId, const MessageSeqId& messageSeqId) { TopicSubscriber t(topic, subscriberId); boost::shared_lock<boost::shared_mutex> lock(topicsubscriber2handler_lock); SubscriberClientChannelHandlerPtr handler = topicsubscriber2handler[t]; if (handler.get() == 0) { LOG4CXX_ERROR(logger, "Cannot consume. Bad handler for topic(" << topic << ") subscriberId(" << subscriberId << ") topicsubscriber2topic(" << &topicsubscriber2handler << ")"); return; } DuplexChannelPtr channel = handler->getChannel(); if (channel.get() == 0) { LOG4CXX_ERROR(logger, "Trying to consume a message on a topic/subscriber pair that don't have a channel. Something fishy going on. Topic: " << topic << " SubscriberId: " << subscriberId << " MessageSeqId: " << messageSeqId.localcomponent()); } PubSubDataPtr data = PubSubData::forConsumeRequest(client->counter().next(), subscriberId, topic, messageSeqId); OperationCallbackPtr writecb(new ConsumeWriteCallback(client, data)); channel->writeRequest(data->getRequest(), writecb); }