/** * DeferredConsumer.h * * Deferred callback for consumers * * @copyright 2014 Copernica BV */ /** * Set up namespace */ namespace AMQP { /** * We extend from the default deferred and add extra functionality */ class DeferredConsumer : public Deferred { private: /** * The channel to which the consumer is linked * @var ChannelImpl */ ChannelImpl *_channel; /** * Callback to execute when a message arrives * @var ConsumeCallback */ ConsumeCallback _consumeCallback; /** * Callback for incoming messages * @var MessageCallback */ MessageCallback _messageCallback; /** * Report success for frames that report start consumer operations * @param name Consumer tag that is started * @return Deferred */ virtual Deferred *reportSuccess(const std::string &name) const override; /** * The channel implementation may call our * private members and construct us */ friend class ChannelImpl; friend class ConsumedMessage; protected: /** * Protected constructor that can only be called * from within the channel implementation * * @param channel the channel implementation * @param failed are we already failed? */ DeferredConsumer(ChannelImpl *channel, bool failed = false) : Deferred(failed), _channel(channel) {} public: /** * Register the function that is called when the consumer starts * @param callback */ DeferredConsumer &onSuccess(const ConsumeCallback &callback) { // store the callback _consumeCallback = callback; // allow chaining return *this; } /** * Register a function to be called when a message arrives * @param callback the callback to execute */ DeferredConsumer& onReceived(const MessageCallback &callback) { // store callback _messageCallback = callback; // allow chaining return *this; } /** * All the onSuccess() functions defined in the base class are accessible too */ using Deferred::onSuccess; }; /** * End namespace */ }