/** * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0. */ #pragma once #include #include #include #include #include #include namespace Aws { namespace SQS { namespace Model { class DeleteMessageRequest; class SendMessageRequest; } } namespace Queues { namespace Sqs { /** * SQS implementation of the Queue interface. See Queue documentation for more details. */ class AWS_QUEUES_API SQSQueue : public Queue { typedef std::function QueueAttributeSuccessEventHandler; typedef std::function QueueAttributeFailedEventHandler; typedef std::function QueueArnFailedEventHandler; typedef std::function QueueArnSuccessEventHandler; public: /** * Notification that getting a queue arn was successful. */ inline void SetQueueArnSuccessEventHandler(const QueueArnSuccessEventHandler& messageHandler) { m_queueArnSuccessHandler = messageHandler; } inline void SetQueueArnSuccessEventHandler(QueueArnSuccessEventHandler&& messageHandler) { m_queueArnSuccessHandler = messageHandler; } /** * Notification that getting a queue arn was successful. */ inline void SetQueueArnFailedEventHandler(const QueueArnFailedEventHandler& messageHandler) { m_queueArnFailedHandler = messageHandler; } inline void SetQueueArnFailedEventHandler(QueueArnFailedEventHandler&& messageHandler) { m_queueArnFailedHandler = messageHandler; } /** * Notification that getting a queue attribute was successful. */ inline void SetQueueAttributeSuccessEventHandler(const QueueAttributeSuccessEventHandler& messageHandler) { m_queueAttributeSuccessHandler = messageHandler; } inline void SetQueueAttributeSuccessEventHandler(QueueAttributeSuccessEventHandler&& messageHandler) { m_queueAttributeSuccessHandler = messageHandler; } /** * Notification that getting a queue attribute failed. */ inline void SetQueueAttributeFailedEventHandler(const QueueAttributeFailedEventHandler& messageHandler) { m_queueAttributeFailedHandler = messageHandler; } inline void SetQueueAttributeFailedEventHandler(QueueAttributeFailedEventHandler&& messageHandler) { m_queueAttributeFailedHandler = messageHandler; } inline const QueueArnSuccessEventHandler& GetQueueArnSuccessEventHandler() const { return m_queueArnSuccessHandler; } inline const QueueArnFailedEventHandler& GetQueueArnFailedEventHandler() const { return m_queueArnFailedHandler; } inline const QueueAttributeSuccessEventHandler& GetQueueAttributeSuccessEventHandler() const { return m_queueAttributeSuccessHandler; } inline const QueueAttributeFailedEventHandler& GetQueueAttributeFailedEventHandler() const { return m_queueAttributeFailedHandler; } /** * Queue name is the name of the queue that the client should poll, push, and/or delete messages on. Call EnsureQueueIsInitialized to create the * queue if it does not exist. You can call GetQueueUrl after IsInitialized() returns true to get your actual Queue URL. */ SQSQueue(const std::shared_ptr& client, const char* queueName, unsigned visibilityTimeout, unsigned pollingFrequencyMs = 10000); /** * Will continue polling until a message is received or StopPolling is called. */ Aws::SQS::Model::Message Top() const override; /** * Does not block. Register for notifications of success or failure with the appropriate handlers. */ void Delete(const Aws::SQS::Model::Message&) override; /** * Does not block. Register for notifications of success or failure with the appropriate handlers. */ void Push(const Aws::SQS::Model::Message&) override; /** * Does not block. Register for notifications of success or failure with the appropriate handlers. */ void RequestArn(); /** * At the very least, this gets your queue url. If the queue does not exist, this will create it. */ void EnsureQueueIsInitialized(); inline bool IsInitialized() const { return !m_queueUrl.empty(); } inline const Aws::String& GetQueueUrl() const { return m_queueUrl; } private: std::shared_ptr m_client; Aws::String m_queueUrl; Aws::String m_queueName; unsigned m_visibilityTimeout; void OnMessageDeletedOutcomeReceived(const SQS::SQSClient*, const SQS::Model::DeleteMessageRequest&, const SQS::Model::DeleteMessageOutcome& deleteMessageOutcome, const std::shared_ptr&); void OnMessageSentOutcomeReceived(const SQS::SQSClient*, const SQS::Model::SendMessageRequest&, const SQS::Model::SendMessageOutcome& deleteMessageOutcome, const std::shared_ptr&); void OnGetQueueAttributesOutcomeReceived(const SQS::SQSClient*, const SQS::Model::GetQueueAttributesRequest&, const SQS::Model::GetQueueAttributesOutcome& deleteMessageOutcome, const std::shared_ptr&); QueueArnSuccessEventHandler m_queueArnSuccessHandler; QueueArnFailedEventHandler m_queueArnFailedHandler; QueueAttributeSuccessEventHandler m_queueAttributeSuccessHandler; QueueAttributeFailedEventHandler m_queueAttributeFailedHandler; }; } } }