示例#1
0
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);
}