void CloseSubscriptionResponseHandler::handleResponse( const PubSubResponsePtr& m, const PubSubDataPtr& txn, const DuplexChannelPtr& channel) { switch (m->statuscode()) { case SUCCESS: if (m->has_responsebody()) { txn->getCallback()->operationComplete(m->responsebody()); } else { txn->getCallback()->operationComplete(ResponseBody()); } break; case SERVICE_DOWN: LOG4CXX_ERROR(logger, "Server responsed with SERVICE_DOWN for " << txn->getTxnId()); txn->getCallback()->operationFailed(ServiceDownException()); break; case CLIENT_ALREADY_SUBSCRIBED: case TOPIC_BUSY: txn->getCallback()->operationFailed(AlreadySubscribedException()); break; case CLIENT_NOT_SUBSCRIBED: txn->getCallback()->operationFailed(NotSubscribedException()); break; case NOT_RESPONSIBLE_FOR_TOPIC: redirectRequest(m, txn, channel); break; default: LOG4CXX_ERROR(logger, "Unexpected response " << m->statuscode() << " for " << txn->getTxnId()); txn->getCallback()->operationFailed(UnexpectedResponseException()); break; } }
void PublisherImpl::messageHandler(const PubSubResponsePtr& m, const PubSubDataPtr& txn) { switch (m->statuscode()) { case SUCCESS: if (m->has_responsebody()) { txn->getCallback()->operationComplete(m->responsebody()); } else { txn->getCallback()->operationComplete(ResponseBody()); } break; case SERVICE_DOWN: LOG4CXX_ERROR(logger, "Server responsed with SERVICE_DOWN for " << txn->getTxnId()); txn->getCallback()->operationFailed(ServiceDownException()); break; default: LOG4CXX_ERROR(logger, "Unexpected response " << m->statuscode() << " for " << txn->getTxnId()); txn->getCallback()->operationFailed(UnexpectedResponseException()); break; } }
void SubscriberClientChannelHandler::messageReceived(const DuplexChannelPtr& channel, const PubSubResponsePtr& m) { if (m->has_message()) { TopicSubscriber ts(m->topic(), m->subscriberid()); // dispatch the message to target topic subscriber. deliverMessage(ts, m); return; } if (m->has_responsebody()) { const ResponseBody& respBody = m->responsebody(); if (respBody.has_subscriptionevent()) { const SubscriptionEventResponse& eventResp = respBody.subscriptionevent(); // dispatch the event TopicSubscriber ts(m->topic(), m->subscriberid()); handleSubscriptionEvent(ts, eventResp.event()); return; } } HedwigClientChannelHandler::messageReceived(channel, m); }