sensord: seperate socket channel for command and monitor 29/128429/1
authorkibak.yoon <kibak.yoon@samsung.com>
Wed, 10 May 2017 04:12:48 +0000 (13:12 +0900)
committerkibak.yoon <kibak.yoon@samsung.com>
Wed, 10 May 2017 04:16:17 +0000 (13:16 +0900)
- m_cmd_channel: get sensor information / check privilege
- m_mon_channel: monitor sensors dynamically added/removed

Change-Id: If746f701ddb32aefe70eafe1f934f8251954efff
Signed-off-by: kibak.yoon <kibak.yoon@samsung.com>
src/client/sensor_manager.cpp
src/client/sensor_manager.h
src/server/server_channel_handler.cpp

index ee783f0..1f66ac4 100644 (file)
@@ -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)
index a2409b4..350bb01 100644 (file)
@@ -76,7 +76,8 @@ private:
        std::vector<sensor_info *> 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<bool> m_connected;
        channel_handler *m_handler;
index 429013a..9c908fd 100644 (file)
@@ -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)