summaryrefslogtreecommitdiff
path: root/src/components/hmi_message_handler/src/websocket_session.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/hmi_message_handler/src/websocket_session.cc')
-rw-r--r--src/components/hmi_message_handler/src/websocket_session.cc31
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());
+ }
}
}