diff --git a/include/DirectCommunicationClient.hpp b/include/DirectCommunicationClient.hpp index de9ddce..18a1f69 100644 --- a/include/DirectCommunicationClient.hpp +++ b/include/DirectCommunicationClient.hpp @@ -46,7 +46,7 @@ namespace DirectCommunication std::atomic_bool isConnected = false; std::function MessageHandle_ = nullptr; - + std::atomic_bool useHandl_ = false;; WHISPER::threadSafeQueue receivedMessages_; diff --git a/src/DirectCommunicationClient.cpp b/src/DirectCommunicationClient.cpp index 25896b6..cd73003 100644 --- a/src/DirectCommunicationClient.cpp +++ b/src/DirectCommunicationClient.cpp @@ -35,19 +35,15 @@ namespace DirectCommunication DirectCommunicationClient::~DirectCommunicationClient() { - sendMessage("CLOSE"); - - stopWorker_ = true; - Worker_.join(); - - socket_.close(); - isConnected = false; + this->disconnect(); } void DirectCommunicationClient::disconnect() - { + { sendMessage("CLOSE"); + useHandl_ = false; + MessageHandle_ = nullptr; stopWorker_ = true; Worker_.join(); @@ -59,6 +55,7 @@ namespace DirectCommunication void DirectCommunicationClient::registerMessageCallback(std::function MessageHandle) { MessageHandle_ = MessageHandle; + useHandl_ = true; } void DirectCommunicationClient::sendMessage(std::string msg) @@ -102,14 +99,19 @@ namespace DirectCommunication }else { - if (MessageHandle_ != nullptr) + if (MessageHandle_ == nullptr) { - auto i = std::async(std::launch::async, MessageHandle_, msg.to_string()); + receivedMessages_.addElement(msg.to_string()); // MessageHandle_(msg.to_string()); } else - { - receivedMessages_.addElement(msg.to_string()); + { + if (useHandl_ == true) + { + auto i = std::async(std::launch::async, MessageHandle_, msg.to_string()); + } + + } }