From 416a20b211539c8db06c26a2297de9109ef69f32 Mon Sep 17 00:00:00 2001 From: claiff Date: Tue, 18 Oct 2022 12:19:24 +0300 Subject: add smtp queue messages --- src/message/sender.cpp | 62 +++++++++++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 29 deletions(-) (limited to 'src/message/sender.cpp') diff --git a/src/message/sender.cpp b/src/message/sender.cpp index 30073a8..a200092 100644 --- a/src/message/sender.cpp +++ b/src/message/sender.cpp @@ -16,9 +16,10 @@ namespace smtp::message // // Constructors/Destructors // - Sender::Sender( manage::Settings& settings_storage, manage::Mail const& mail_to ) + Sender::Sender( manage::Settings const& settings_storage, manage::Mail const& mail_to, ThreadSafeQueue& message_queue ) : mSettingsStorage( settings_storage ) , mMailTo( mail_to ) + , mMessageQueue( message_queue ) { } @@ -27,7 +28,7 @@ namespace smtp::message //Public methods // - bool Sender::Send( std::string const& mail_from, std::string const& subject, std::string const& text ) + void Sender::Send() { static const std::string METHOD_NAME = "Send message"; @@ -35,35 +36,38 @@ namespace smtp::message curl_slist* recipients = nullptr; WriteThis upload_ctx{}; auto curl = curl_easy_init(); - //TODO сделать инициализацию через регистратор инициализаторов - if( !InitCurl( curl, upload_ctx, mail_from )) - { - logger::LoggerSet::GetInstance()->LogError( METHOD_NAME, "Error to initializate message service" ); - return false; - } - //TODO раздать mail_to другим методам - auto mail_to = mMailTo.GetMailToSend(); - if( mail_to.empty()) - { - logger::LoggerSet::GetInstance()->LogError( METHOD_NAME, "We haven't any mail to" ); - return false; - } - FillRecipients( curl, recipients ); - UpdateMailText( mail_from, subject, text ); - - result = curl_easy_perform( curl ); - if( result != CURLE_OK ) - { - std::string message = "Error to send messge: " + std::string( curl_easy_strerror( result )); - logger::LoggerSet::GetInstance()->LogError( METHOD_NAME, message ); - return false; - } - //TODO сделать деинициализацию через регистратор деинициализаторов - curl_slist_free_all( recipients ); - curl_easy_cleanup( curl ); - return true; + while(1) + { + auto message = mMessageQueue.WaitAndPop(); + if( !InitCurl( curl, upload_ctx, mSettingsStorage.GetUserName() )) + { + logger::LoggerSet::GetInstance()->LogError( METHOD_NAME, "Error to initializate message service" ); + } + //TODO раздать mail_to другим методам + auto mail_to = mMailTo.GetMailToSend(); + if( mail_to.empty()) + { + logger::LoggerSet::GetInstance()->LogError( METHOD_NAME, "We haven't any mail to" ); + } + FillRecipients( curl, recipients ); + + + UpdateMailText( mSettingsStorage.GetUserName(), message->subject, message->text ); + + result = curl_easy_perform( curl ); + + if( result != CURLE_OK ) + { + std::string message = "Error to send messge: " + std::string( curl_easy_strerror( result )); + logger::LoggerSet::GetInstance()->LogError( METHOD_NAME, message ); + } + upload_ctx.counter = 0; + } + //TODO сделать деинициализацию через регистратор деинициализаторов + curl_slist_free_all( recipients ); + curl_easy_cleanup( curl ); } // -- cgit v1.2.3