4 * Copyright (c) 2014 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_logs.h>
28 client_info_manager::client_info_manager()
31 client_info_manager::~client_info_manager()
36 client_info_manager& client_info_manager::get_instance()
38 static client_info_manager inst;
42 bool client_info_manager::get_registered_events(int client_id, sensor_id_t sensor_id, event_type_vector &event_vec)
46 auto it_record = m_clients.find(client_id);
48 if (it_record == m_clients.end()) {
49 ERR("Client[%d] is not found", client_id);
53 if(!it_record->second.get_registered_events(sensor_id, event_vec))
60 bool client_info_manager::register_event(int client_id, sensor_id_t sensor_id, unsigned int event_type)
64 auto it_record = m_clients.find(client_id);
66 if (it_record == m_clients.end()) {
67 ERR("Client[%d] is not found", client_id);
71 if(!it_record->second.register_event(sensor_id, event_type))
77 bool client_info_manager::unregister_event(int client_id, sensor_id_t sensor_id, unsigned int event_type)
81 auto it_record = m_clients.find(client_id);
83 if (it_record == m_clients.end()) {
84 ERR("Client[%d] is not found", client_id);
88 if(!it_record->second.unregister_event(sensor_id, event_type))
94 bool client_info_manager::set_batch(int client_id, sensor_id_t sensor_id, unsigned int interval, unsigned latency)
98 auto it_record = m_clients.find(client_id);
100 if (it_record == m_clients.end()) {
101 ERR("Client[%d] is not found", client_id);
105 return it_record->second.set_batch(sensor_id, interval, latency);
108 bool client_info_manager::get_batch(int client_id, sensor_id_t sensor_id, unsigned int &interval, unsigned int &latency)
112 auto it_record = m_clients.find(client_id);
114 if (it_record == m_clients.end()) {
115 ERR("Client[%d] is not found", client_id);
119 return it_record->second.get_batch(sensor_id, interval, latency);
122 bool client_info_manager::set_option(int client_id, sensor_id_t sensor_id, int option)
126 auto it_record = m_clients.find(client_id);
128 if (it_record == m_clients.end()) {
129 ERR("Client[%d] is not found", client_id);
133 if(!it_record->second.set_option(sensor_id, option))
139 bool client_info_manager::set_wakeup(int client_id, sensor_id_t sensor_id, int wakeup)
143 auto it_record = m_clients.find(client_id);
145 if (it_record == m_clients.end()) {
146 ERR("Client[%d] is not found", client_id);
150 if(!it_record->second.set_wakeup(sensor_id, wakeup))
156 bool client_info_manager::set_start(int client_id, sensor_id_t sensor_id, bool start)
160 auto it_record = m_clients.find(client_id);
162 if (it_record == m_clients.end()) {
163 ERR("Client[%d] is not found", client_id);
167 if(!it_record->second.set_start(sensor_id, start))
174 bool client_info_manager::is_started(int client_id, sensor_id_t sensor_id)
178 auto it_record = m_clients.find(client_id);
180 if (it_record == m_clients.end()) {
181 ERR("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 ERR("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));
212 bool client_info_manager::remove_client_record(int client_id)
216 auto it_record = m_clients.find(client_id);
218 if (it_record == m_clients.end()) {
219 ERR("Client[%d] is not found", client_id);
223 m_clients.erase(it_record);
225 INFO("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 auto it_record = m_clients.find(client_id);
237 return (it_record != m_clients.end());
241 void client_info_manager::set_client_info(int client_id, pid_t pid, const string &name)
245 auto it_record = m_clients.find(client_id);
247 if (it_record == m_clients.end()) {
248 ERR("Client[%d] is not found", client_id);
252 it_record->second.set_client_info(pid, name);
257 const char* client_info_manager::get_client_info(int client_id)
261 auto it_record = m_clients.find(client_id);
263 if (it_record == m_clients.end()) {
264 DBG("Client[%d] is not found", client_id);
268 return it_record->second.get_client_info();
271 bool client_info_manager::set_permission(int client_id, int permission)
275 auto it_record = m_clients.find(client_id);
277 if (it_record == m_clients.end()) {
278 DBG("Client[%d] is not found", client_id);
282 it_record->second.set_permission(permission);
286 bool client_info_manager::get_permission(int client_id, int &permission)
290 auto it_record = m_clients.find(client_id);
292 if (it_record == m_clients.end()) {
293 DBG("Client[%d] is not found", client_id);
297 permission = it_record->second.get_permission();
301 bool client_info_manager::create_sensor_record(int client_id, sensor_id_t sensor_id)
305 auto it_record = m_clients.find(client_id);
307 if (it_record == m_clients.end()) {
308 ERR("Client record[%d] is not registered", client_id);
312 it_record->second.add_sensor_usage(sensor_id);
317 bool client_info_manager::remove_sensor_record(int client_id, sensor_id_t sensor_id)
321 auto it_record = m_clients.find(client_id);
323 if (it_record == m_clients.end()) {
324 ERR("Client[%d] is not found", client_id);
328 if(!it_record->second.remove_sensor_usage(sensor_id))
331 if(!it_record->second.has_sensor_usage())
332 remove_client_record(client_id);
338 bool client_info_manager::has_sensor_record(int client_id, sensor_id_t sensor_id)
342 auto it_record = m_clients.find(client_id);
344 if (it_record == m_clients.end()) {
345 DBG("Client[%d] is not found", client_id);
349 if(!it_record->second.has_sensor_usage(sensor_id))
355 bool client_info_manager::has_sensor_record(int client_id)
359 auto it_record = m_clients.find(client_id);
361 if (it_record == m_clients.end()) {
362 DBG("Client[%d] is not found", client_id);
366 if(!it_record->second.has_sensor_usage())
372 bool client_info_manager::get_listener_ids(sensor_id_t sensor_id, unsigned int event_type, client_id_vec &id_vec)
376 auto it_record = m_clients.begin();
378 while (it_record != m_clients.end()) {
379 if(it_record->second.is_listening_event(sensor_id, event_type))
380 id_vec.push_back(it_record->first);
388 bool client_info_manager::get_event_socket(int client_id, csocket &socket)
392 auto it_record = m_clients.find(client_id);
394 if (it_record == m_clients.end()) {
395 ERR("Client[%d] is not found", client_id);
399 it_record->second.get_event_socket(socket);
404 bool client_info_manager::set_event_socket(int client_id, const csocket &socket)
409 auto it_record = m_clients.find(client_id);
411 if (it_record == m_clients.end()) {
412 ERR("Client[%d] is not found", client_id);
416 it_record->second.set_event_socket(socket);