blob: 006ba11cd8d7e70a4a96250777f8138f9abb7dde [file] [log] [blame]
#pragma once
#include <functional>
#include <system_error>
#include "ProcessQueue.h"
#include "ReceiveMessageCallback.h"
ROCKETMQ_NAMESPACE_BEGIN
class AsyncReceiveMessageCallback
: public ReceiveMessageCallback,
public std::enable_shared_from_this<AsyncReceiveMessageCallback> {
public:
explicit AsyncReceiveMessageCallback(ProcessQueueWeakPtr process_queue);
~AsyncReceiveMessageCallback() override = default;
void onCompletion(const std::error_code &ec,
const ReceiveMessageResult &result) override;
void receiveMessageLater();
void receiveMessageImmediately();
private:
/**
* Hold a weak_ptr to ProcessQueue. Once ProcessQueue was released, stop the
* pop-cycle immediately.
*/
ProcessQueueWeakPtr process_queue_;
std::function<void(void)> receive_message_later_;
void checkThrottleThenReceive();
static const char *RECEIVE_LATER_TASK_NAME;
};
ROCKETMQ_NAMESPACE_END