/* * BusMessage.cpp * * Created on: Aug 17, 2010 * Author: lamikr */ #include #include "BusMessage.hh" #include "RequestResponseBus.hh" using namespace std; using namespace plpbus_orb; using namespace plpbus; using namespace CORBA; #define CONST_MSG_ID_KEY_NAME "_msgtype" BusMessage::BusMessage() { _dataItemSeq = new DataItemSequence(0); } BusMessage::BusMessage(long type_param) { _dataItemSeq = new DataItemSequence(0); add_long_parameter(CONST_MSG_ID_KEY_NAME, type_param); } BusMessage::BusMessage(long type_param, const char *arg_name_param, const char *arg_string_value_param) { _dataItemSeq = new DataItemSequence(0); add_long_parameter(CONST_MSG_ID_KEY_NAME, type_param); add_string_parameter(arg_name_param, arg_string_value_param); } BusMessage::~BusMessage() { } int BusMessage::add_string_parameter(const char *arg_name_param, const char *value_param) { long length; int ret_val; DataItem *item; DataItemSequence *seq; ret_val = 0; seq = (DataItemSequence *)_dataItemSeq; if (arg_name_param != NULL) { length = seq->length(); item = new DataItem(); item->name = strdup(arg_name_param); if (value_param != NULL) { item->value <<= strdup(value_param); seq->length(length + 1); (*seq)[length] = *item; } } else { ret_val = -1; } return ret_val; } int BusMessage::add_long_parameter(const char *arg_name_param, long value_param) { long length; int ret_val; DataItem *item; DataItemSequence *seq; ret_val = 0; seq = (DataItemSequence *)_dataItemSeq; if (arg_name_param != NULL) { length = seq->length(); item = new DataItem(); item->name = strdup(arg_name_param); item->value <<= value_param; seq->length(length + 1); (*seq)[length] = *item; } else { ret_val = -1; } return ret_val; } int BusMessage::add_int_parameter(const char *arg_name_param, int value_param) { long length; int ret_val; DataItem *item; DataItemSequence *seq; ret_val = 0; seq = (DataItemSequence *)_dataItemSeq; if (arg_name_param != NULL) { length = seq->length(); item = new DataItem(); item->name = strdup(arg_name_param); item->value <<= (long)value_param; seq->length(length + 1); (*seq)[length] = *item; } else { ret_val = -1; } return ret_val; } int BusMessage::add_double_parameter(const char *arg_name_param, double value_param) { long length; int ret_val; DataItem *item; DataItemSequence *seq; ret_val = 0; log_debug("add_double_parameter() started\n"); seq = (DataItemSequence *)_dataItemSeq; if (arg_name_param != NULL) { length = seq->length(); item = new DataItem(); item->name = strdup(arg_name_param); item->value <<= (long)value_param; seq->length(length + 1); (*seq)[length] = *item; } else { ret_val = -1; } log_debug("add_double_parameter() done\n"); return ret_val; } int BusMessage::add_float_parameter(const char *arg_name_param, float value_param) { long length; int ret_val; DataItem *item; DataItemSequence *seq; ret_val = 0; seq = (DataItemSequence *)_dataItemSeq; if (arg_name_param != NULL) { length = seq->length(); item = new DataItem(); item->name = strdup(arg_name_param); item->value <<= (long)value_param; seq->length(length + 1); (*seq)[length] = *item; } else { ret_val = -1; } return ret_val; } static DataItem *get_dataitem_by_param_name(DataItemSequence *seq, const char *arg_name_param) { DataItem *ret_val; long int count; DataItem *item; const char *item_name; ret_val = NULL; count = seq->length(); for (long ii = 0; ii < count; ii++) { item = &(*seq)[ii]; item_name = item->name; if (strcmp(arg_name_param, item_name) == 0) { ret_val = item; break; } } return ret_val; } bool BusMessage::get_type(long *type_param) { bool ret_val; long res; ret_val = get_long_parameter(CONST_MSG_ID_KEY_NAME, &res); if (ret_val == true) { *type_param = res; } return ret_val; } bool BusMessage::get_string_parameter(const char *arg_name_param, const char **value_param) { bool ret_val; DataItem *item; DataItemSequence *seq; ret_val = false; seq = (DataItemSequence *)_dataItemSeq; item = get_dataitem_by_param_name(seq, arg_name_param); if (item != NULL) { item->value >>= *value_param; ret_val = true; } return ret_val; } bool BusMessage::get_long_parameter(const char *arg_name_param, long *value_param) { bool ret_val; DataItem *item; DataItemSequence *seq; ret_val = false; seq = (DataItemSequence *)_dataItemSeq; item = get_dataitem_by_param_name(seq, arg_name_param); if (item != NULL) { item->value >>= *value_param; ret_val = true; } return ret_val; } bool BusMessage::get_int_parameter(const char *arg_name_param, int *value_param) { bool ret_val; DataItem *item; DataItemSequence *seq; long tmp; ret_val = false; seq = (DataItemSequence *)_dataItemSeq; item = get_dataitem_by_param_name(seq, arg_name_param); if (item != NULL) { item->value >>= tmp; *value_param = (int)tmp; ret_val = true; } return ret_val; } bool BusMessage::get_double_parameter(const char *arg_name_param, double *value_param) { bool ret_val; DataItem *item; DataItemSequence *seq; ret_val = false; seq = (DataItemSequence *)_dataItemSeq; item = get_dataitem_by_param_name(seq, arg_name_param); if (item != NULL) { item->value >>= *value_param; ret_val = true; } return ret_val; } bool BusMessage::get_float_parameter(const char *arg_name_param, float *value_param) { bool ret_val; DataItem *item; DataItemSequence *seq; ret_val = false; seq = (DataItemSequence *)_dataItemSeq; item = get_dataitem_by_param_name(seq, arg_name_param); if (item != NULL) { item->value >>= *value_param; ret_val = true; } return ret_val; } void BusMessage::printout_dataitem(long index, void *item) { CORBA::TCKind kind; const char *name; DataItem *dataitem; dataitem = (DataItem *)item; if (item != NULL) { if (dataitem->name != NULL) { name = dataitem->name; kind = dataitem->value.type()->kind(); switch(kind) { case tk_string: { const char *val; dataitem->value >>= val; log_debug("\t[%ld] %s: %s\n", index, name, val); } break; case tk_long: { long val; dataitem->value >>= val; log_debug("\t[%ld] %s: %ld\n", index, name, val); //val_str = strdup("long"); } break; case tk_double: { double val; dataitem->value >>= val; log_debug("\t[%ld] %s: %f\n", index, name, val); //val_str = strdup("double"); } break; case tk_float: { float val; dataitem->value >>= val; log_debug("\t[l%ld] %s: %f\n", index, name, val); //val_str = strdup("float"); } break; default: log_error("\t[%ld], name: %s, value unknown\n", index, name); } } else { log_error("\t[%ld] Invalid data item name name or value\n", index); } } else { log_error("\t[%ld] dataItem NULL.", index); } } void BusMessage::printout() { long int count; DataItem item; DataItemSequence *seq; seq = (DataItemSequence *)_dataItemSeq; count = seq->length(); log_debug("BusMessage.printout(): parameter count: %ld\n", count); for (long ii = 0; ii < count; ii++) { item = (*seq)[ii]; printout_dataitem(ii, &item); } log_debug("BusMessage.printout() done\n");; }