void Receiver::received(Message& message) { if (!(skipDups && isDuplicate(message))) { bool eos = message.getData() == EOS; if (!eos) std::cout << message.getData() << std::endl; if (eos || ++processed == count) subscription.cancel(); } }
void Listener::received(Message & message) { if (message.getData() == "That's all, folks!") { done = true; if(verbosity > 0 ) { cout << "Shutting down listener for " << message.getDestination() << endl; cout << "Listener received " << count << " messages (" << received_twice.size() << " received_twice)" << endl; } subscription.cancel(); if ( verbosity > 0 ) cout << "LISTENER COMPLETED\n"; if ( ! gaps ) { cout << "no gaps were detected\n"; cout << received_twice.size() << " messages were received twice.\n"; } else { cout << "gaps detected\n"; for ( unsigned int i = 0; i < received_twice.size(); ++ i ) cout << "received_twice " << received_twice[i] << endl; } } else { uint sn = message.getHeaders().getAsInt("sn"); if (lastSn < sn) { if (sn - lastSn > 1) { cerr << "Error: gap in sequence between " << lastSn << " and " << sn << endl; gaps = true; } lastSn = sn; ++count; if ( ! ( count % reportFrequency ) ) { if ( verbosity > 0 ) cout << "Listener has received " << count << " messages on queue " << queueName << endl; } } else { received_twice.push_back ( sn ); } } }
void receivedFromSource(Message& message) { QPID_LOG(debug, "transfering " << (transfered+1) << " of " << expected); message.getDeliveryProperties().setRoutingKey(destination); async(sourceSubscription.getSession()).messageTransfer(arg::content=message); if (++transfered == expected) { QPID_LOG(info, "completed job: " << transfered << " messages shifted from " << source << " to " << destination); sourceSubscription.accept(sourceSubscription.getUnaccepted()); sourceSubscription.getSession().txCommit(); sourceSubscription.cancel(); //grant credit to allow broker to send us another control message controlSubscription.grantMessageCredit(1); } }
void receivedFromControl(Message& message) { if (message.getData() == "transfer") { source = message.getHeaders().getAsString("src"); destination = message.getHeaders().getAsString("dest"); expected = message.getHeaders().getAsInt("count"); transfered = 0; QPID_LOG(info, "received transfer request: " << expected << " messages to be shifted from " << source << " to " << destination); subscribeToSource(controlSubscription.getSubscriptionManager()); } else if (message.getData() == "quit") { QPID_LOG(info, "received quit request"); controlSubscription.cancel(); } else { std::cerr << "Rejecting invalid message: " << message.getData() << std::endl; controlSubscription.getSession().messageReject(SequenceSet(message.getId())); } }