4 * Copyright (c) 2015 Samsung Electronics Co., Ltd.
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
20 #include <command_common.h>
21 #include <external_client_manager.h>
22 #include <sensor_common.h>
24 using std::shared_ptr;
25 using std::make_shared;
29 external_client_manager::external_client_manager()
32 external_client_manager::~external_client_manager()
36 external_client_manager& external_client_manager::get_instance(void)
38 static external_client_manager instance;
42 int external_client_manager::create_client_record(void)
48 shared_ptr<external_sensor_record> client_record = make_shared<external_sensor_record>();
50 while (m_clients.count(client_id) > 0)
53 if (client_id == MAX_HANDLE) {
54 _E("Sensor records of clients are full");
55 return MAX_HANDLE_REACHED;
58 client_record->set_client_id(client_id);
60 m_clients.insert(pair<int, shared_ptr<external_sensor_record>>(client_id, client_record));
65 bool external_client_manager::remove_client_record(int client_id)
69 if (!m_clients.erase(client_id)) {
70 _E("Client[%d] is not found", client_id);
74 _I("Client record for client[%d] is removed from external client manager", client_id);
78 bool external_client_manager::has_client_record(int client_id)
82 auto it_record = m_clients.find(client_id);
84 return (it_record != m_clients.end());
87 void external_client_manager::set_client_info(int client_id, pid_t pid, const string &name)
91 auto it_record = m_clients.find(client_id);
93 if (it_record == m_clients.end()) {
94 _E("Client[%d] is not found", client_id);
98 it_record->second->set_client_info(pid, name);
103 const char* external_client_manager::get_client_info(int client_id)
107 auto it_record = m_clients.find(client_id);
109 if (it_record == m_clients.end()) {
110 _D("Client[%d] is not found", client_id);
114 return it_record->second->get_client_info();
117 bool external_client_manager::create_sensor_record(int client_id, sensor_id_t sensor)
121 auto it_record = m_clients.find(client_id);
123 if (it_record == m_clients.end()) {
124 _E("Client record[%d] is not registered", client_id);
128 return it_record->second->add_usage(sensor);
131 bool external_client_manager::remove_sensor_record(int client_id, sensor_id_t sensor)
135 auto it_record = m_clients.find(client_id);
137 if (it_record == m_clients.end()) {
138 _E("Client[%d] is not found", client_id);
142 if (!it_record->second->remove_usage(sensor))
145 if (!it_record->second->has_usage())
146 remove_client_record(client_id);
151 bool external_client_manager::has_sensor_record(int client_id, sensor_id_t sensor)
155 auto it_record = m_clients.find(client_id);
157 if (it_record == m_clients.end()) {
158 _D("Client[%d] is not found", client_id);
162 return it_record->second->has_usage(sensor);
165 bool external_client_manager::has_sensor_record(int client_id)
169 auto it_record = m_clients.find(client_id);
171 if (it_record == m_clients.end()) {
172 _D("Client[%d] is not found", client_id);
176 return it_record->second->has_usage();
179 bool external_client_manager::get_listener_socket(sensor_id_t sensor, csocket &sock)
183 auto it_record = m_clients.begin();
185 while (it_record != m_clients.end()) {
186 if (it_record->second->has_usage(sensor)) {
187 it_record->second->get_command_socket(sock);
197 bool external_client_manager::get_command_socket(int client_id, csocket &socket)
201 auto it_record = m_clients.find(client_id);
203 if (it_record == m_clients.end()) {
204 _E("Client[%d] is not found", client_id);
208 it_record->second->get_command_socket(socket);
213 bool external_client_manager::set_command_socket(int client_id, const csocket &socket)
217 auto it_record = m_clients.find(client_id);
219 if (it_record == m_clients.end()) {
220 _E("Client[%d] is not found", client_id);
224 it_record->second->set_command_socket(socket);