summaryrefslogtreecommitdiff
path: root/src/message/thread_safe_queue.cpp
diff options
context:
space:
mode:
authorclaiff <claiff@mail.ru>2022-10-18 12:19:24 +0300
committerclaiff <claiff@mail.ru>2022-10-18 12:21:54 +0300
commit416a20b211539c8db06c26a2297de9109ef69f32 (patch)
treeac8056f021ffcd8b1dead8a6a1f796602674ed05 /src/message/thread_safe_queue.cpp
parent04e97b30880c1c3252fe900ccac268267539e424 (diff)
downloadobmc-sila-smtp-416a20b211539c8db06c26a2297de9109ef69f32.tar.xz
add smtp queue messages
Diffstat (limited to 'src/message/thread_safe_queue.cpp')
-rw-r--r--src/message/thread_safe_queue.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/message/thread_safe_queue.cpp b/src/message/thread_safe_queue.cpp
new file mode 100644
index 0000000..092a2ac
--- /dev/null
+++ b/src/message/thread_safe_queue.cpp
@@ -0,0 +1,21 @@
+#include "thread_safe_queue.hpp"
+
+namespace smtp::message
+{
+ void ThreadSafeQueue::Push( Message const &message)
+ {
+ std::lock_guard<std::mutex> lock{mMutex};
+ mMessageQueue.push( message );
+ mCondition.notify_one();
+ }
+
+ std::shared_ptr<Message> ThreadSafeQueue::WaitAndPop()
+ {
+ std::unique_lock<std::mutex> lock{mMutex};
+ mCondition.wait(lock, [this](){return !mMessageQueue.empty();});
+ auto result = std::make_shared<Message>(mMessageQueue.front());
+ mMessageQueue.pop();
+ return result;
+ }
+
+}