From 6d0b1e93be9b26d9949923e16ea40d293a4e8121 Mon Sep 17 00:00:00 2001 From: "kibak.yoon" Date: Wed, 10 May 2017 13:12:48 +0900 Subject: [PATCH] sensord: seperate socket channel for command and monitor - m_cmd_channel: get sensor information / check privilege - m_mon_channel: monitor sensors dynamically added/removed Change-Id: If746f701ddb32aefe70eafe1f934f8251954efff Signed-off-by: kibak.yoon --- src/client/sensor_manager.cpp | 45 +++++++++++++++++++---------------- src/client/sensor_manager.h | 3 ++- src/server/server_channel_handler.cpp | 2 +- 3 files changed, 27 insertions(+), 23 deletions(-) diff --git a/src/client/sensor_manager.cpp b/src/client/sensor_manager.cpp index ee783f0..1f66ac4 100644 --- a/src/client/sensor_manager.cpp +++ b/src/client/sensor_manager.cpp @@ -35,7 +35,8 @@ using namespace sensor; sensor_manager::sensor_manager() : m_client(NULL) -, m_channel(NULL) +, m_cmd_channel(NULL) +, m_mon_channel(NULL) , m_connected(false) , m_handler(NULL) { @@ -195,18 +196,16 @@ void sensor_manager::deinit(void) bool sensor_manager::connect_channel(void) { - m_channel = m_client->connect(m_handler, &m_loop); - retvm_if(!m_channel, false, "Failed to connect to server"); - ipc::message msg; - msg.set_type(CMD_MANAGER_CONNECT); - m_channel->send_sync(&msg); - m_channel->read_sync(msg); - if (msg.header()->err < 0) { - /* TODO: if failed, disconnect channel */ - return false; - } + m_cmd_channel = m_client->connect(NULL); + retvm_if(!m_cmd_channel, false, "Failed to connect to server"); + + m_mon_channel = m_client->connect(m_handler, &m_loop); + retvm_if(!m_mon_channel, false, "Failed to connect to server"); + + msg.set_type(CMD_MANAGER_CONNECT); + m_mon_channel->send_sync(&msg); m_connected.store(true); @@ -230,16 +229,20 @@ void sensor_manager::disconnect(void) ipc::message reply; msg.set_type(CMD_MANAGER_DISCONNECT); - m_channel->send_sync(&msg); - m_channel->read_sync(reply); + m_mon_channel->send_sync(&msg); + m_mon_channel->read_sync(reply); retm_if(reply.header()->err < 0, "Failed to disconnect"); - m_connected.store(false); - m_channel->disconnect(); + m_mon_channel->disconnect(); - delete m_channel; - m_channel = NULL; + delete m_mon_channel; + m_mon_channel = NULL; + m_cmd_channel->disconnect(); + delete m_cmd_channel; + m_cmd_channel = NULL; + + m_connected.store(false); _D("Disconnected"); } @@ -294,10 +297,10 @@ bool sensor_manager::get_sensors_internal(void) msg.set_type(CMD_MANAGER_SENSOR_LIST); - ret = m_channel->send_sync(&msg); + ret = m_cmd_channel->send_sync(&msg); retvm_if(!ret, false, "Failed to send message"); - ret = m_channel->read_sync(reply); + ret = m_cmd_channel->read_sync(reply); retvm_if(!ret, false, "Failed to receive message"); reply.disclose(buf); @@ -320,10 +323,10 @@ bool sensor_manager::has_privilege(std::string &uri) memcpy(buf.sensor, uri.c_str(), uri.size()); msg.enclose((const char *)&buf, sizeof(buf)); - ret = m_channel->send_sync(&msg); + ret = m_cmd_channel->send_sync(&msg); retvm_if(!ret, false, "Failed to send message"); - ret = m_channel->read_sync(reply); + ret = m_cmd_channel->read_sync(reply); retvm_if(!ret, false, "Failed to receive message"); if (reply.header()->err == OP_SUCCESS) diff --git a/src/client/sensor_manager.h b/src/client/sensor_manager.h index a2409b4..350bb01 100644 --- a/src/client/sensor_manager.h +++ b/src/client/sensor_manager.h @@ -76,7 +76,8 @@ private: std::vector get_infos(const char *uri); ipc::ipc_client *m_client; - ipc::channel *m_channel; + ipc::channel *m_cmd_channel; /* get sensor information */ + ipc::channel *m_mon_channel; /* monitor sensors dinamically added/removed */ ipc::event_loop m_loop; std::atomic m_connected; channel_handler *m_handler; diff --git a/src/server/server_channel_handler.cpp b/src/server/server_channel_handler.cpp index 429013a..9c908fd 100644 --- a/src/server/server_channel_handler.cpp +++ b/src/server/server_channel_handler.cpp @@ -120,7 +120,7 @@ void server_channel_handler::read(channel *ch, message &msg) int server_channel_handler::manager_connect(channel *ch, message &msg) { m_manager->register_channel(ch); - return send_reply(ch, OP_SUCCESS); + return OP_SUCCESS; } int server_channel_handler::manager_disconnect(channel *ch, message &msg) -- 2.7.4