void SubscriberImpl::startDeliveryWithFilter(const std::string& topic, const std::string& subscriberId, const MessageHandlerCallbackPtr& callback, const ClientMessageFilterPtr& filter) { if (0 == filter.get()) { throw NullMessageFilterException(); } if (0 == callback.get()) { throw NullMessageHandlerException(); } TopicSubscriber t(topic, subscriberId); // Get the subscriber channel handler SubscriberClientChannelHandlerPtr handler = channelManager->getSubscriptionChannelHandler(t); if (handler.get() == 0) { LOG4CXX_ERROR(logger, "Trying to start deliver on a non existant handler topic = " << topic << ", subscriber = " << subscriberId); throw NotSubscribedException(); } handler->startDelivery(t, callback, filter); }
void SubscriberImpl::startDelivery(const std::string& topic, const std::string& subscriberId, const MessageHandlerCallbackPtr& callback) { TopicSubscriber t(topic, subscriberId); boost::shared_lock<boost::shared_mutex> lock(topicsubscriber2handler_lock); SubscriberClientChannelHandlerPtr handler = topicsubscriber2handler[t]; if (handler.get() == 0) { LOG4CXX_ERROR(logger, "Trying to start deliver on a non existant handler topic = " << topic << ", subscriber = " << subscriberId); } handler->startDelivery(callback); }
void SubscriberClientChannelHandler::handoverDelivery(const SubscriberClientChannelHandlerPtr& newHandler) { LOG4CXX_DEBUG(logger, "Messages in queue " << queue.size()); MessageHandlerCallbackPtr handler = this->handler; stopDelivery(); // resets old handler newHandler->startDelivery(handler); }