X-Git-Url: http://pilppa.org/gitweb/?a=blobdiff_plain;f=src%2Fplpbus%2FBusMessage.cc;h=7cab6e9d8f48edfb410c60e244d8bb58257211b2;hb=cc8c00aeb93557b1e73e98d106236606b781502d;hp=18fc487496a638a4dd00366fd264ad12c7100ac4;hpb=15b6554ce37fd29cb507a40e49bbbfe1a438b84b;p=libplpbus.git diff --git a/src/plpbus/BusMessage.cc b/src/plpbus/BusMessage.cc index 18fc487..7cab6e9 100644 --- a/src/plpbus/BusMessage.cc +++ b/src/plpbus/BusMessage.cc @@ -15,6 +15,8 @@ using namespace plpbus_orb; using namespace plpbus; using namespace CORBA; +#define CONST_MSG_ID_KEY_NAME "_msgtype" + BusMessage::BusMessage() { _dataItemSeq = new DataItemSequence(0); } @@ -159,13 +161,122 @@ int BusMessage::add_float_parameter(const char *arg_name_param, float value_para 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: @@ -173,14 +284,14 @@ void BusMessage::printout_dataitem(long index, void *item) { const char *val; dataitem->value >>= val; - log_debug("\t[%ld], value: %s\n", index, val); + log_debug("\t[%ld] %s: %s\n", index, name, val); } break; case tk_long: { long val; dataitem->value >>= val; - log_debug("\t[%ld], value: %ld\n", index, val); + log_debug("\t[%ld] %s: %ld\n", index, name, val); //val_str = strdup("long"); } break; @@ -188,7 +299,7 @@ void BusMessage::printout_dataitem(long index, void *item) { { double val; dataitem->value >>= val; - log_debug("\t[%ld], value: %f\n", index, val); + log_debug("\t[%ld] %s: %f\n", index, name, val); //val_str = strdup("double"); } break; @@ -196,12 +307,12 @@ void BusMessage::printout_dataitem(long index, void *item) { { float val; dataitem->value >>= val; - log_debug("\t[l%ld] value: %f\n", index, val); + log_debug("\t[l%ld] %s: %f\n", index, name, val); //val_str = strdup("float"); } break; default: - log_error("\t[%ld], value unknown\n", index); + log_error("\t[%ld], name: %s, value unknown\n", index, name); } } else {