summaryrefslogtreecommitdiff
path: root/src/message/sender.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/message/sender.cpp')
-rw-r--r--src/message/sender.cpp62
1 files changed, 33 insertions, 29 deletions
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 );
}
//