blob: 96bb96f6fc4d3f3954de96dd548cd6c77aa7cf46 [file] [log] [blame]
#pragma once
#include <absl/base/internal/thread_annotations.h>
#include <atomic>
#include <list>
#include <memory>
#include <system_error>
#include "FifoContext.h"
#include "ProducerImpl.h"
#include "absl/base/thread_annotations.h"
#include "absl/synchronization/mutex.h"
#include "rocketmq/SendCallback.h"
#include "rocketmq/SendReceipt.h"
ROCKETMQ_NAMESPACE_BEGIN
class FifoProducerPartition : public std::enable_shared_from_this<FifoProducerPartition> {
public:
FifoProducerPartition(std::shared_ptr<ProducerImpl> producer, std::string&& name)
: producer_(producer), name_(std::move(name)) {
}
void add(FifoContext&& context) LOCKS_EXCLUDED(messages_mtx_);
void trySend() LOCKS_EXCLUDED(messages_mtx_);
void onComplete(const std::error_code& ec, const SendReceipt& receipt, SendCallback& callback);
private:
std::shared_ptr<ProducerImpl> producer_;
std::list<FifoContext> messages_ GUARDED_BY(messages_mtx_);
absl::Mutex messages_mtx_;
std::atomic_bool inflight_{false};
std::string name_;
};
ROCKETMQ_NAMESPACE_END