27 static const char*
MEM_TAG =
"Aws::Queues::Queue";
33 template<
typename MESSAGE_TYPE>
36 typedef std::function<void(const Queue*, const MESSAGE_TYPE&, bool&)> MessageReceivedEventHandler;
37 typedef std::function<void(const Queue*, const MESSAGE_TYPE&)> MessageDeleteFailedEventHandler;
38 typedef std::function<void(const Queue*, const MESSAGE_TYPE&)> MessageDeleteSuccessEventHandler;
39 typedef std::function<void(const Queue*, const MESSAGE_TYPE&)> MessageSendFailedEventHandler;
40 typedef std::function<void(const Queue*, const MESSAGE_TYPE&)> MessageSendSuccessEventHandler;
49 Queue(
unsigned pollingFrequency) :
50 m_continue(true), m_pollingFrequencyMs(pollingFrequency), m_pollingThread(nullptr)
59 virtual MESSAGE_TYPE
Top()
const = 0;
60 virtual void Delete(
const MESSAGE_TYPE&) = 0;
61 virtual void Push(
const MESSAGE_TYPE&) = 0;
73 m_pollingThread = Aws::MakeUnique<std::thread>(
MEM_TAG, &Queue::Main,
this);
88 m_pollingThread->join();
89 m_pollingThread =
nullptr;
119 auto start = std::chrono::system_clock::now();
120 MESSAGE_TYPE topMessage =
Top();
121 bool deleteMessage =
false;
126 receivedHandler(
this, topMessage, deleteMessage);
136 auto stop = std::chrono::system_clock::now();
137 auto timeTaken = std::chrono::duration_cast<std::chrono::milliseconds>(stop - start);
139 if (m_pollingFrequencyMs >= timeTaken.count())
141 std::this_thread::sleep_for(std::chrono::milliseconds(m_pollingFrequencyMs - timeTaken.count()));
147 unsigned m_pollingFrequencyMs;
151 MessageReceivedEventHandler m_messageReceivedHandler;
152 MessageDeleteFailedEventHandler m_messageDeleteFailedHandler;
153 MessageDeleteSuccessEventHandler m_messageDeleteSuccessHandler;
154 MessageSendFailedEventHandler m_messageSendFailedHandler;
155 MessageSendSuccessEventHandler m_messageSendSuccessHandler;
const MessageReceivedEventHandler & GetMessageReceivedEventHandler() const
void SetMessageSendSuccessEventHandler(MessageSendSuccessEventHandler &&messageHandler)
void SetMessageReceivedEventHandler(const MessageReceivedEventHandler &messageHandler)
void SetMessageDeleteFailedEventHandler(MessageDeleteFailedEventHandler &&messageHandler)
void SetMessageSendFailedEventHandler(MessageSendFailedEventHandler &&messageHandler)
const MessageDeleteFailedEventHandler & GetMessageDeleteFailedEventHandler() const
void SetMessageSendSuccessEventHandler(const MessageSendSuccessEventHandler &messageHandler)
void SetMessageDeleteFailedEventHandler(const MessageDeleteFailedEventHandler &messageHandler)
virtual void Push(const MESSAGE_TYPE &)=0
const MessageDeleteSuccessEventHandler & GetMessageDeleteSuccessEventHandler() const
const MessageSendSuccessEventHandler & GetMessageSendSuccessEventHandler() const
void SetMessageSendFailedEventHandler(const MessageSendFailedEventHandler &messageHandler)
virtual void Delete(const MESSAGE_TYPE &)=0
static const char * MEM_TAG
const MessageSendFailedEventHandler & GetMessageSendFailedEventHandler() const
void SetMessageReceivedEventHandler(MessageReceivedEventHandler &&messageHandler)
Queue(unsigned pollingFrequency)
void SetMessageDeleteSuccessEventHandler(MessageDeleteSuccessEventHandler &&messageHandler)
std::unique_ptr< T, Deleter< T > > UniquePtr
virtual MESSAGE_TYPE Top() const =0
void SetMessageDeleteSuccessEventHandler(const MessageDeleteSuccessEventHandler &messageHandler)
JSON (JavaScript Object Notation).
std::atomic< bool > m_continue