in shims/qpid-proton-cpp/src/qpidit/jms_hdrs_props_test/Receiver.cpp [81:139]
void Receiver::on_message(proton::delivery &d, proton::message &m) {
try {
if (_received < _expected) {
int8_t t = qpidit::JMS_MESSAGE_TYPE; // qpidit::JMS_MESSAGE_TYPE has value 0
try {
t = proton::get<int8_t>(m.message_annotations().get(proton::symbol("x-opt-jms-msg-type")));
} catch (const proton::conversion_error& e) {
std::cout << "JmsReceiver::on_message(): Error converting value for annotation \"x-opt-jms-msg-type\": " << e.what() << std::endl;
throw;
} catch (const std::exception& e) {
std::cout << "JmsReceiver::on_message(): Missing annotation \"x-opt-jms-msg-type\"" << std::endl;
throw;
}
switch (t) {
case qpidit::JMS_MESSAGE_TYPE:
receiveJmsMessage(m);
break;
case qpidit::JMS_OBJECTMESSAGE_TYPE:
receiveJmsObjectMessage(m);
break;
case qpidit::JMS_MAPMESSAGE_TYPE:
receiveJmsMapMessage(m);
break;
case qpidit::JMS_BYTESMESSAGE_TYPE:
receiveJmsBytesMessage(m);
break;
case qpidit::JMS_STREAMMESSAGE_TYPE:
receiveJmsStreamMessage(m);
break;
case qpidit::JMS_TEXTMESSAGE_TYPE:
receiveJmsTextMessage(m);
break;
default:;
// TODO: handle error - unknown JMS message type
}
processMessageHeaders(m);
processMessageProperties(m);
std::string subType(_subTypeList[_subTypeIndex]);
// Increment the subtype if the required number of messages have been received
if (_receivedSubTypeList.size() >= _testNumberMap[subType].asInt() &&
_subTypeIndex < _testNumberMap.size()) {
_receivedValueMap[subType] = _receivedSubTypeList;
_receivedSubTypeList.clear();
++_subTypeIndex;
}
_received++;
if (_received >= _expected) {
d.receiver().close();
d.connection().close();
}
}
} catch (const std::exception&) {
d.receiver().close();
d.connection().close();
throw;
}
}