diff options
Diffstat (limited to 'src/components/hmi_message_handler/src/websocket_session.cc')
-rw-r--r-- | src/components/hmi_message_handler/src/websocket_session.cc | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/src/components/hmi_message_handler/src/websocket_session.cc b/src/components/hmi_message_handler/src/websocket_session.cc index 3d18da19d2..7ffb35aba6 100644 --- a/src/components/hmi_message_handler/src/websocket_session.cc +++ b/src/components/hmi_message_handler/src/websocket_session.cc @@ -31,6 +31,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "hmi_message_handler/websocket_session.h" #include <unistd.h> #include "hmi_message_handler/mb_controller.h" +#include "utils/jsoncpp_reader_wrapper.h" + using namespace boost::beast::websocket; namespace hmi_message_handler { @@ -46,6 +48,7 @@ WebsocketSession::WebsocketSession(boost::asio::ip::tcp::socket socket, , shutdown_(false) , thread_delegate_(new LoopThreadDelegate(&message_queue_, this)) , thread_(threads::CreateThread("WS Async Send", thread_delegate_)) { + m_writer["indentation"] = ""; thread_->start(threads::ThreadOptions()); } @@ -92,7 +95,8 @@ void WebsocketSession::Recv(boost::system::error_code ec) { std::placeholders::_2))); } -void WebsocketSession::Send(std::string& message, Json::Value& json_message) { +void WebsocketSession::Send(const std::string& message, + Json::Value& json_message) { if (shutdown_) { return; } @@ -102,7 +106,7 @@ void WebsocketSession::Send(std::string& message, Json::Value& json_message) { } void WebsocketSession::sendJsonMessage(Json::Value& message) { - std::string str_msg = m_writer.write(message); + const std::string str_msg = Json::writeString(m_writer, message) + '\n'; sync_primitives::AutoLock auto_lock(queue_lock_); if (!isNotification(message) && !isResponse(message)) { mWaitResponseQueue.insert(std::map<std::string, std::string>::value_type( @@ -128,14 +132,15 @@ void WebsocketSession::Read(boost::system::error_code ec, std::string data = boost::beast::buffers_to_string(buffer_.data()); m_receivingBuffer += data; + utils::JsonReader reader; Json::Value root; - if (!m_reader.parse(m_receivingBuffer, root)) { - std::string str_err = "Invalid JSON Message: " + data; - LOG4CXX_ERROR(ws_logger_, str_err); + + if (!reader.parse(data, &root)) { + LOG4CXX_ERROR(ws_logger_, "Invalid JSON Message."); return; } - std::string wmes = m_receiverWriter.write(root); + const std::string wmes = Json::writeString(m_receiver_writer, root); ssize_t beginpos = m_receivingBuffer.find(wmes); if (-1 != beginpos) { m_receivingBuffer.erase(0, beginpos + wmes.length()); @@ -304,12 +309,14 @@ void WebsocketSession::LoopThreadDelegate::exitThreadMain() { } void WebsocketSession::LoopThreadDelegate::DrainQueue() { - while (!message_queue_.empty()) { - Message message_ptr; - message_queue_.pop(message_ptr); - if (!shutdown_) { - handler_.ws_.write(boost::asio::buffer(*message_ptr)); - }; + Message message_ptr; + while (!shutdown_ && message_queue_.pop(message_ptr)) { + boost::system::error_code ec; + handler_.ws_.write(boost::asio::buffer(*message_ptr), ec); + if (ec) { + LOG4CXX_ERROR(ws_logger_, + "A system error has occurred: " << ec.message()); + } } } |