/* * DeviceManagerClient.cc * * Created on: Mar 4, 2011 * Author: lamikr */ #include #include #include #include #include #include #include "DeviceManagerClient.hh" #include "../src/plp/devicebus/DeviceBusMessageId.hh" using namespace std; using namespace plp; using namespace plpbus; using namespace plpdevicebus; DeviceManagerClient::DeviceManagerClient() { _device_list = NULL; } static void clean_device_list(list *dev_lst) { Device *dev; if (dev_lst != NULL) { while (dev_lst->empty() == false) { dev = dev_lst->back(); dev_lst->pop_back(); delete(dev); } delete(dev_lst); dev_lst = NULL; } } DeviceManagerClient::~DeviceManagerClient() { clean_device_list(_device_list); } const std::list *DeviceManagerClient::get_device_list(BusClient *client_param, int *err_flg) { //send_request__get_device_list(client_param); BusMessage *msg_req; BusMessage *msg_rsp; msg_rsp = NULL; msg_req = new BusMessage(MSG_TYPE_ID__GET_DEVICE_LIST); client_param->send_message_and_wait_response(msg_req, &msg_rsp); clean_device_list(_device_list); _device_list = parse_device_list_msg(msg_rsp, err_flg); delete(msg_req); delete(msg_rsp); return _device_list; } BusMessage *DeviceManagerClient::get_latest_data(BusClient *client_param, string device_id_param) { BusMessage *msg_req; BusMessage *msg_rsp; msg_rsp = NULL; msg_req = new BusMessage(MSG_TYPE_ID__GET_LATEST_DATA); msg_req->add_string_parameter(REQ__GET_LATEST_DATA__ID, device_id_param.c_str()); client_param->send_message_and_wait_response(msg_req, &msg_rsp); delete(msg_req); return msg_rsp; } list *DeviceManagerClient::parse_device_list_msg(BusMessage *msg_param, int *err_flg) { int ii; long count; ostringstream key; string id; string name; string type; string datastr; EnumDeviceLifeCycleStatus state; int state_i; Device *dev; Data *data; list *ret_val; count = msg_param->get_long_parameter(RSP__DEVICE_LIST__DEVICE_COUNT, err_flg); log_debug("device count: %ld\n", count); ret_val = new list; if (*err_flg == PLP_OK) { for (ii = 0; ii < count; ii++) { key.str(""); key << RSP__DEVICE_LIST__ID << ii; id = msg_param->get_string_parameter(key.str(), err_flg); if (*err_flg != PLP_OK) break; key.str(""); key << RSP__DEVICE_LIST__NAME << ii; name = msg_param->get_string_parameter(key.str(), err_flg); if (*err_flg != PLP_OK) break; key.str(""); key << RSP__DEVICE_LIST__TYPE << ii; type = msg_param->get_string_parameter(key.str(), err_flg); if (*err_flg != PLP_OK) break; key.str(""); key << RSP__DEVICE_LIST__LF_STATE << ii; state_i = msg_param->get_int_parameter(key.str(), err_flg); if (*err_flg != PLP_OK) break; state = (EnumDeviceLifeCycleStatus)state_i; key.str(""); key << RSP__DEVICE_LIST__DATA << ii; datastr = msg_param->get_string_parameter(key.str(), err_flg); if (*err_flg != PLP_OK) break; data = Data::parse_string(datastr); if (data == NULL) { *err_flg = PLP_ERR; break; } dev = new DeviceData(id, type, name, state, data); ret_val->push_back(dev); } } return ret_val; }