6#include "azure/core/amqp/internal/amqp_settle_mode.hpp"
7#include "azure/core/amqp/models/amqp_message.hpp"
8#include "azure/core/amqp/models/amqp_value.hpp"
9#include "cancellable.hpp"
10#include "claims_based_security.hpp"
11#include "common/async_operation_queue.hpp"
12#include "connection.hpp"
14#include "models/amqp_error.hpp"
16#include <azure/core/nullable.hpp>
20#if defined(_azure_TESTING_BUILD)
22namespace Azure {
namespace Core {
namespace Amqp {
namespace Tests {
namespace MessageTests {
24 class MockServiceEndpoint;
28namespace Azure {
namespace Core {
namespace Amqp {
namespace _detail {
29 class MessageSenderImpl;
30 class MessageSenderFactory;
33namespace Azure {
namespace Core {
namespace Amqp {
namespace _internal {
34 enum class MessageSendStatus
42 std::ostream& operator<<(std::ostream& stream, MessageSendStatus status);
44 enum class MessageSenderState
53 std::ostream& operator<<(std::ostream& stream, MessageSenderState state);
56 class MessageSenderEvents {
58 ~MessageSenderEvents() =
default;
61 virtual void OnMessageSenderStateChanged(
62 MessageSender
const& sender,
63 MessageSenderState newState,
64 MessageSenderState oldState)
66 virtual void OnMessageSenderDisconnected(
67 MessageSender
const& sender,
68 Models::_internal::AmqpError
const& error)
72 struct MessageSenderOptions final
93 SenderSettleMode SettleMode{};
96 Models::_internal::MessageSource MessageSource;
99 Nullable<uint64_t> MaxMessageSize;
110 uint32_t MaxLinkCredits{};
120 Nullable<uint32_t> InitialDeliveryCount;
123 bool EnableTrace{
false};
126 bool AuthenticationRequired{
true};
129 class MessageSender final {
131 using MessageSendCompleteCallback
132 = std::function<void(MessageSendStatus sendResult, Models::AmqpValue
const& deliveryState)>;
134 ~MessageSender() noexcept;
136 MessageSender(MessageSender const&) = default;
137 MessageSender& operator=(MessageSender const&) = default;
138 MessageSender(MessageSender&&) noexcept = default;
139 MessageSender& operator=(MessageSender&&) noexcept = default;
150 _azure_NODISCARD Models::_internal::AmqpError Open(Context const& context = {});
155 void Close(Context
const& context = {});
161 std::string GetLinkName()
const;
167 std::uint64_t GetMaxMessageSize()
const;
176 _azure_NODISCARD std::tuple<MessageSendStatus, Models::_internal::AmqpError> Send(
177 Models::AmqpMessage
const& message,
178 Context
const& context = {});
182 _azure_NODISCARD Models::_internal::AmqpError HalfOpen(Context
const& context = {});
187 MessageSender(std::shared_ptr<_detail::MessageSenderImpl> sender) : m_impl{sender} {}
189 friend class _detail::MessageSenderFactory;
190 std::shared_ptr<_detail::MessageSenderImpl> m_impl;
191#if _azure_TESTING_BUILD
192 friend class Azure::Core::Amqp::Tests::MessageTests::AmqpServerMock;
193 friend class Azure::Core::Amqp::Tests::MessageTests::MockServiceEndpoint;
194 friend class Azure::Core::Amqp::Tests::MessageTests::MessageListenerEvents;