4 * Copyright (c) 2013 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 <client_info_manager.h>
22 #include <sensor_log.h>
28 client_info_manager::client_info_manager()
32 client_info_manager::~client_info_manager()
39 client_info_manager& client_info_manager::get_instance(void)
41 static client_info_manager inst;
45 bool client_info_manager::get_registered_events(int client_id, sensor_id_t sensor_id, event_type_vector &event_vec)
49 retvm_if(m_clients.empty(), false, "client list is empty");
51 auto it_record = m_clients.find(client_id);
53 if (it_record == m_clients.end()) {
54 _E("Client[%d] is not found", client_id);
58 if (!it_record->second.get_registered_events(sensor_id, event_vec))
64 bool client_info_manager::register_event(int client_id, sensor_id_t sensor_id, unsigned int event_type)
68 retvm_if(m_clients.empty(), false, "client list is empty");
70 auto it_record = m_clients.find(client_id);
72 if (it_record == m_clients.end()) {
73 _E("Client[%d] is not found", client_id);
77 if (!it_record->second.register_event(sensor_id, event_type))
83 bool client_info_manager::unregister_event(int client_id, sensor_id_t sensor_id, unsigned int event_type)
87 retvm_if(m_clients.empty(), false, "client list is empty");
89 auto it_record = m_clients.find(client_id);
91 if (it_record == m_clients.end()) {
92 _E("Client[%d] is not found", client_id);
96 if (!it_record->second.unregister_event(sensor_id, event_type))
102 bool client_info_manager::set_batch(int client_id, sensor_id_t sensor_id, unsigned int interval, unsigned latency)
106 retvm_if(m_clients.empty(), false, "client list is empty");
108 auto it_record = m_clients.find(client_id);
110 if (it_record == m_clients.end()) {
111 _E("Client[%d] is not found", client_id);
115 return it_record->second.set_batch(sensor_id, interval, latency);
118 bool client_info_manager::get_batch(int client_id, sensor_id_t sensor_id, unsigned int &interval, unsigned int &latency)
122 retvm_if(m_clients.empty(), false, "client list is empty");
124 auto it_record = m_clients.find(client_id);
126 if (it_record == m_clients.end()) {
127 _E("Client[%d] is not found", client_id);
131 return it_record->second.get_batch(sensor_id, interval, latency);
134 bool client_info_manager::set_pause_policy(int client_id, sensor_id_t sensor_id, int pause_policy)
138 retvm_if(m_clients.empty(), false, "client list is empty");
140 auto it_record = m_clients.find(client_id);
142 if (it_record == m_clients.end()) {
143 _E("Client[%d] is not found", client_id);
147 if (!it_record->second.set_pause_policy(sensor_id, pause_policy))
153 bool client_info_manager::set_start(int client_id, sensor_id_t sensor_id, bool start)
157 retvm_if(m_clients.empty(), false, "client list is empty");
159 auto it_record = m_clients.find(client_id);
161 if (it_record == m_clients.end()) {
162 _E("Client[%d] is not found", client_id);
166 if (!it_record->second.set_start(sensor_id, start))
172 bool client_info_manager::is_started(int client_id, sensor_id_t sensor_id)
176 retvm_if(m_clients.empty(), false, "client list is empty");
178 auto it_record = m_clients.find(client_id);
180 if (it_record == m_clients.end()) {
181 _E("Client[%d] is not found", client_id);
185 return it_record->second.is_started(sensor_id);
188 int client_info_manager::create_client_record(void)
194 client_sensor_record client_record;
196 while (m_clients.count(client_id) > 0)
199 if (client_id == MAX_HANDLE) {
200 _E("Sensor records of clients are full");
201 return MAX_HANDLE_REACHED;
204 client_record.set_client_id(client_id);
206 m_clients.insert(pair<int, client_sensor_record>(client_id, client_record));
211 bool client_info_manager::remove_client_record(int client_id)
215 retvm_if(m_clients.empty(), false, "client list is empty");
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 m_clients.erase(it_record);
226 _I("Client record for client[%d] is removed from client info manager", client_id);
231 bool client_info_manager::has_client_record(int client_id)
235 retvm_if(m_clients.empty(), false, "client list is empty");
237 auto it_record = m_clients.find(client_id);
239 return (it_record != m_clients.end());
242 void client_info_manager::set_client_info(int client_id, pid_t pid, const string &name)
246 auto it_record = m_clients.find(client_id);
248 if (it_record == m_clients.end()) {
249 _E("Client[%d] is not found", client_id);
253 it_record->second.set_client_info(pid, name);
258 const char* client_info_manager::get_client_info(int client_id)
262 retvm_if(m_clients.empty(), NULL, "client list is empty");
264 auto it_record = m_clients.find(client_id);
266 if (it_record == m_clients.end()) {
267 _D("Client[%d] is not found", client_id);
271 return it_record->second.get_client_info();
274 bool client_info_manager::set_permission(int client_id, int permission)
278 retvm_if(m_clients.empty(), false, "client list is empty");
280 auto it_record = m_clients.find(client_id);
282 if (it_record == m_clients.end()) {
283 _D("Client[%d] is not found", client_id);
287 it_record->second.set_permission(permission);
291 bool client_info_manager::get_permission(int client_id, int &permission)
295 retvm_if(m_clients.empty(), false, "client list is empty");
297 auto it_record = m_clients.find(client_id);
299 if (it_record == m_clients.end()) {
300 _D("Client[%d] is not found", client_id);
304 permission = it_record->second.get_permission();
308 bool client_info_manager::create_sensor_record(int client_id, sensor_id_t sensor_id)
312 retvm_if(m_clients.empty(), false, "client list is empty");
314 auto it_record = m_clients.find(client_id);
316 if (it_record == m_clients.end()) {
317 _E("Client record[%d] is not registered", client_id);
321 it_record->second.add_sensor_usage(sensor_id);
326 bool client_info_manager::remove_sensor_record(int client_id, sensor_id_t sensor_id)
330 retvm_if(m_clients.empty(), false, "client list is empty");
332 auto it_record = m_clients.find(client_id);
334 if (it_record == m_clients.end()) {
335 _E("Client[%d] is not found", client_id);
339 if (!it_record->second.remove_sensor_usage(sensor_id))
342 if (!it_record->second.has_sensor_usage())
343 remove_client_record(client_id);
348 bool client_info_manager::has_sensor_record(int client_id, sensor_id_t sensor_id)
352 retvm_if(m_clients.empty(), false, "client list is empty");
354 auto it_record = m_clients.find(client_id);
356 if (it_record == m_clients.end()) {
357 _D("Client[%d] is not found", client_id);
361 if (!it_record->second.has_sensor_usage(sensor_id))
367 bool client_info_manager::has_sensor_record(int client_id)
371 retvm_if(m_clients.empty(), false, "client list is empty");
373 auto it_record = m_clients.find(client_id);
375 if (it_record == m_clients.end()) {
376 _D("Client[%d] is not found", client_id);
380 if (!it_record->second.has_sensor_usage())
386 bool client_info_manager::get_listener_ids(sensor_id_t sensor_id, unsigned int event_type, client_id_vec &id_vec)
390 retvm_if(m_clients.empty(), false, "client list is empty");
392 auto it_record = m_clients.begin();
394 while (it_record != m_clients.end()) {
395 if (it_record->second.is_listening_event(sensor_id, event_type))
396 id_vec.push_back(it_record->first);
404 bool client_info_manager::get_event_socket(int client_id, csocket &socket)
408 retvm_if(m_clients.empty(), false, "client list is empty");
410 auto it_record = m_clients.find(client_id);
412 if (it_record == m_clients.end()) {
413 _E("Client[%d] is not found", client_id);
417 it_record->second.get_event_socket(socket);
422 bool client_info_manager::set_event_socket(int client_id, const csocket &socket)
426 retvm_if(m_clients.empty(), false, "client list is empty");
428 auto it_record = m_clients.find(client_id);
430 if (it_record == m_clients.end()) {
431 _E("Client[%d] is not found", client_id);
435 it_record->second.set_event_socket(socket);