]> pilppa.org Git - libplpdevicebus.git/blobdiff - src_server/DeviceManagerServer.cc
implemented get_latest_data method
[libplpdevicebus.git] / src_server / DeviceManagerServer.cc
index d83accb671f6d4c06c786ce09b868ab5801844fe..3eb8a0106526a191691584934f7c2f11ad78f89c 100644 (file)
@@ -65,49 +65,59 @@ DeviceManagerServer::DeviceManagerServer(list<Device *> dev_lst_param) {
 DeviceManagerServer::~DeviceManagerServer() {
 }
 
+void decode_device_to_busmessage(const BusMessage *ret_val,
+                               Device *device,
+                               int indx) {
+       ostringstream   key;
+       SensorDevice    *sensor;
+       Data            *data;
+       string          data_str;
+
+       if ((ret_val != NULL) &&
+           (device != NULL)) {
+               key.str("");
+               key << RSP__DEVICE_LIST__ID << indx;
+               ((BusMessage *)ret_val)->add_string_parameter(key.str(), device->get_id());
+
+               key.str("");
+               key << RSP__DEVICE_LIST__NAME << indx;
+               ((BusMessage *)ret_val)->add_string_parameter(key.str(), device->get_name());
+
+               key.str("");
+               key << RSP__DEVICE_LIST__TYPE << indx;
+               ((BusMessage *)ret_val)->add_string_parameter(key.str(), device->get_type());
+
+               key.str("");
+               key << RSP__DEVICE_LIST__LF_STATE << indx;
+               ((BusMessage *)ret_val)->add_int_parameter(key.str(), device->get_lifecycle_state());
+               sensor = dynamic_cast<SensorDevice *>(device);
+               if (sensor != NULL) {
+                       key.str("");
+                       key << RSP__DEVICE_LIST__DATA << indx;
+                       data    = sensor->get_data();
+                       if (data != NULL) {
+                               data_str        = data->to_string();
+                               log_debug("returning data: %s\n", data_str.c_str());
+                               ((BusMessage *)ret_val)->add_string_parameter(key.str(), data_str);
+                               delete(data);
+                       }
+               }
+       }
+}
+
 void DeviceManagerServer::get_device_list(const BusMessage *ret_val) {
-       Data                            *data;
        list<Device *>::iterator        list_iter;
        Device                          *device;
-       SensorDevice                    *sensor;
        int                             indx;
-       ostringstream                   key;
-       string                          data_str;
 
        indx    = 0;
        ((BusMessage *)ret_val)->add_int_parameter(RSP__DEVICE_LIST__DEVICE_COUNT, _dev_lst.size());
        for (list_iter = _dev_lst.begin(); list_iter != _dev_lst.end(); list_iter++) {
                device  = (Device *)*list_iter;
-               if (device != NULL) {
-                       key.str("");
-                       key << RSP__DEVICE_LIST__ID << indx;
-                       ((BusMessage *)ret_val)->add_string_parameter(key.str(), device->get_id());
-
-                       key.str("");
-                       key << RSP__DEVICE_LIST__NAME << indx;
-                       ((BusMessage *)ret_val)->add_string_parameter(key.str(), device->get_name());
-
-                       key.str("");
-                       key << RSP__DEVICE_LIST__TYPE << indx;
-                       ((BusMessage *)ret_val)->add_string_parameter(key.str(), device->get_type());
-
-                       key.str("");
-                       key << RSP__DEVICE_LIST__LF_STATE << indx;
-                       ((BusMessage *)ret_val)->add_int_parameter(key.str(), device->get_lifecycle_state());
-                       sensor = dynamic_cast<SensorDevice *>(device);
-                       if (sensor != NULL) {
-                               key.str("");
-                               key << RSP__DEVICE_LIST__DATA << indx;
-                               data    = sensor->get_data();
-                               if (data != NULL) {
-                                       data_str = data->to_string();
-                                       log_debug("returning data: %s\n", data_str.c_str());
-                                       ((BusMessage *)ret_val)->add_string_parameter(key.str(), data_str);
-                                       delete(data);
-                               }
-                       }
-                       indx++;
-               }
+               decode_device_to_busmessage(ret_val,
+                                       device,
+                                       indx);
+               indx++;
        }
 }
 
@@ -129,31 +139,60 @@ const Device *DeviceManagerServer::get_device_by_id(string id_param) {
        return ret_val;
 }
 
-static void add_data_values_to_bus_message(const BusMessage *msg_rsp_param, Data *data, string key_name_base_param) {
-       int             ii;
-       int             cnt;
-       double          val;
-       ostringstream   key;
+static void add_data_values_to_bus_message(const BusMessage *msg_rsp_param,
+                                       Data *data,
+                                       string key_name_base_param) {
+       string val_str;
 
-       cnt     = data->get_value_count();
-       for (ii = 0; ii < cnt; ii++) {
-               key.str("");
-               key << key_name_base_param.c_str() << ii;
-               val     = data->get(ii);
-               ((BusMessage *)msg_rsp_param)->add_double_parameter(key.str(), val);
+       val_str = data->to_string();
+       ((BusMessage *)msg_rsp_param)->add_string_parameter(key_name_base_param, val_str);
+}
+
+void decode_data_to_busmessage(const BusMessage *ret_val,
+                       const DataReader *reader) {
+       DataRange       *dr;
+       Data            *data;
+
+       data    = ((DataReader *)reader)->get_latest_data();
+       if (data != NULL) {
+               add_data_values_to_bus_message(ret_val,
+                                       data,
+                                       RSP__GET_LATEST_DATA__VALUE);
+               //((BusMessage *)ret_val)->printout();
+               delete(data);
+       }
+       dr      = ((DataReader *)reader)->get_daily_summary(MIN);
+       if (dr != NULL) {
+               if (dr->get_count() > 0) {
+                       data    = dr->get_first();;
+                       add_data_values_to_bus_message(ret_val,
+                                       data,
+                                       RSP__GET_LATEST_DATA__MIN_VALUE);
+                       delete(data);
+               }
+               delete(dr);
+       }
+       dr      = ((DataReader *)reader)->get_daily_summary(MAX);
+       if (dr != NULL) {
+               if (dr->get_count() > 0) {
+                       data    = dr->get_first();
+                       add_data_values_to_bus_message(ret_val,
+                                               data,
+                                               RSP__GET_LATEST_DATA__MAX_VALUE);
+                       delete(data);
+               }
+               delete(dr);
        }
 }
 
-void DeviceManagerServer::get_latest_data(BusMessage *msg_req_param, const BusMessage *ret_val) {
+void DeviceManagerServer::get_latest_data(BusMessage *msg_req_param,
+                                       const BusMessage *ret_val) {
        string                  id;
        int                     err_flg;
        Device                  *dev;
        SensorDevice            *sensor;
-       Data                    *data;
        ostringstream           key;
-       int                     cnt;
        const DataReader        *reader;
-       DataRange               *dr;
 
        id      = msg_req_param->get_string_parameter(REQ__GET_LATEST_DATA__ID, &err_flg);
        if (err_flg == PLP_OK) {
@@ -162,36 +201,7 @@ void DeviceManagerServer::get_latest_data(BusMessage *msg_req_param, const BusMe
                        sensor  = dynamic_cast<SensorDevice *>(dev);
                        if (sensor != NULL) {
                                reader  = sensor->get_device_data();
-                               data    = ((DataReader *)reader)->get_latest_data();
-                               if (data != NULL) {
-                                       cnt     = data->get_value_count();
-                                       ((BusMessage *)ret_val)->add_int_parameter(RSP__GET_LATEST_DATA__VALUE_COUNT, cnt);
-                                       ((BusMessage *)ret_val)->add_string_parameter(RSP__GET_LATEST_DATA__DATE,
-                                                                               data->get_date().to_string());
-                                       add_data_values_to_bus_message(ret_val,
-                                                                       data, RSP__GET_LATEST_DATA__VALUE);
-                                       ((BusMessage *)ret_val)->printout();
-                                       dr      = ((DataReader *)reader)->get_daily_summary(MIN);
-                                       if (dr != NULL) {
-                                               if (dr->get_count() > 0) {
-                                                       data    = dr->get_first()->clone();;
-                                                       add_data_values_to_bus_message(ret_val,
-                                                                       data,
-                                                                       RSP__GET_LATEST_DATA__MIN_VALUE);
-                                               }
-                                               delete(dr);
-                                       }
-                                       dr      = ((DataReader *)reader)->get_daily_summary(MAX);
-                                       if (dr != NULL) {
-                                               if (dr->get_count() > 0) {
-                                                       data    = dr->get_first()->clone();
-                                                       add_data_values_to_bus_message(ret_val,
-                                                                               data,
-                                                                               RSP__GET_LATEST_DATA__MAX_VALUE);
-                                               }
-                                               delete(dr);
-                                       }
-                               }
+                               decode_data_to_busmessage(ret_val, reader);
                        }
                }
        }