X-Git-Url: http://pilppa.org/gitweb/?p=libplpbus.git;a=blobdiff_plain;f=src%2Fplpbus%2FBusMessage.cc;h=d592a6610e48273fd50843177044c394ec7078c4;hp=1743d4c8c807dc82ba7f47898c5f95a81bf15754;hb=b0d18f2b84f652e012471b8339bf81b12d731d6e;hpb=4245d1b8a55a8f461634e94d9bac9e0043a9612b diff --git a/src/plpbus/BusMessage.cc b/src/plpbus/BusMessage.cc index 1743d4c..d592a66 100644 --- a/src/plpbus/BusMessage.cc +++ b/src/plpbus/BusMessage.cc @@ -5,7 +5,11 @@ * Author: lamikr */ +#include +#include + #include +#include #include "BusMessage.hh" #include "RequestResponseBus.hh" @@ -15,183 +19,308 @@ using namespace plpbus_orb; using namespace plpbus; using namespace CORBA; +#define CONST_MSG_ID_KEY_NAME "_msgtype" + BusMessage::BusMessage() { - _dataItemSeq = new DataItemSequence(); - log_debug("new BusMessage()\n"); + _dataItemSeq = new DataItemSequence(0); } -BusMessage::BusMessage(const char *name_param, const char *value_param) { - DataItem *item; +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() { DataItemSequence *seq; - if (name_param != NULL) { - item = new DataItem(); - item->name = strdup(name_param); - item->value <<= strdup(value_param); + log_debug("\n"); + seq = (DataItemSequence *)_dataItemSeq; + if (seq != NULL) { + delete(seq); + } +} - seq = new DataItemSequence(0); - seq->length(1); - (*seq)[0] = *item; - _dataItemSeq = seq; +int BusMessage::add_cstring_parameter(const char *arg_name_param, const char *value_param) { + long ln; + int ret_val; + DataItemSequence *seq; + DataItem *item; + + ret_val = 0; + seq = (DataItemSequence *)_dataItemSeq; + if (arg_name_param != NULL) { + ln = seq->length(); + seq->length(ln + 1); + item = &((*seq)[ln]); + item->name = arg_name_param; + item->str_value = value_param; } else { - _dataItemSeq = new DataItemSequence(0); + ret_val = -1; } + return ret_val; } -BusMessage::~BusMessage() { -} - -int BusMessage::add_string_parameter(const char *name_param, const char *value_param) +int BusMessage::add_string_parameter(string arg_name_param, string value_param) { - long length; + long ln; int ret_val; - DataItem *item; DataItemSequence *seq; + DataItem *item; + //str = (const char)"hooo"; ret_val = 0; seq = (DataItemSequence *)_dataItemSeq; - if (name_param != NULL) { - length = seq->length(); - item = new DataItem(); - item->name = strdup(name_param); - if (value_param != NULL) { - item->value <<= strdup(value_param); - seq->length(length + 1); - (*seq)[length] = *item; - } + if (arg_name_param.empty() == false) { + ln = seq->length(); + seq->length(ln + 1); + item = &((*seq)[ln]); + item->name = arg_name_param.c_str(); + item->str_value = value_param.c_str(); } else { - seq->length(0); ret_val = -1; } return ret_val; } -int BusMessage::add_long_parameter(const char *name_param, long value_param) +int BusMessage::add_long_parameter(string arg_name_param, long value_param) { long length; int ret_val; - DataItem *item; DataItemSequence *seq; ret_val = 0; seq = (DataItemSequence *)_dataItemSeq; - if (name_param != NULL) { + if (arg_name_param.empty() == false) { length = seq->length(); - item = new DataItem(); - item->name = strdup(name_param); - item->value <<= value_param; - seq->length(length + 1); - (*seq)[length] = *item; + (*seq)[length].name = arg_name_param.c_str(); + (*seq)[length].value <<= value_param; + (*seq)[length].str_value = ""; } else { - seq->length(0); ret_val = -1; } return ret_val; } -int BusMessage::add_int_parameter(const char *name_param, int value_param) +int BusMessage::add_int_parameter(string arg_name_param, int value_param) { long length; int ret_val; - DataItem *item; DataItemSequence *seq; ret_val = 0; seq = (DataItemSequence *)_dataItemSeq; - if (name_param != NULL) { + if (arg_name_param.empty() == false) { length = seq->length(); - item = new DataItem(); - item->name = strdup(name_param); - item->value <<= (long)value_param; - seq->length(length + 1); - (*seq)[length] = *item; + (*seq)[length].name = arg_name_param.c_str(); + (*seq)[length].value <<= (long)value_param; + (*seq)[length].str_value = ""; } else { - seq->length(0); ret_val = -1; } return ret_val; } -int BusMessage::add_double_parameter(const char *name_param, double value_param) +int BusMessage::add_double_parameter(string 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 (name_param != NULL) { + if (arg_name_param.empty() == false) { length = seq->length(); - item = new DataItem(); - item->name = strdup(name_param); - item->value <<= (long)value_param; - seq->length(length + 1); - (*seq)[length] = *item; + (*seq)[length].name = arg_name_param.c_str(); + (*seq)[length].value <<= (double)value_param; + (*seq)[length].str_value = ""; } else { - seq->length(0); ret_val = -1; } log_debug("add_double_parameter() done\n"); return ret_val; } -int BusMessage::add_float_parameter(const char *name_param, float value_param) +int BusMessage::add_float_parameter(string arg_name_param, float value_param) { long length; int ret_val; - DataItem *item; DataItemSequence *seq; ret_val = 0; seq = (DataItemSequence *)_dataItemSeq; - if (name_param != NULL) { + if (arg_name_param.empty() == false) { length = seq->length(); - item = new DataItem(); - item->name = strdup(name_param); - item->value <<= (long)value_param; - seq->length(length + 1); - (*seq)[length] = *item; + (*seq)[length].name = arg_name_param.c_str(); + (*seq)[length].value <<= (float)value_param; + (*seq)[length].str_value = ""; } else { - seq->length(0); ret_val = -1; } return ret_val; } +static DataItem *get_dataitem_by_param_name(DataItemSequence *seq, string 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.c_str(), item_name) == 0) { + ret_val = item; + break; + } + } + return ret_val; +} + +long BusMessage::get_type(int *err_flg) { + long ret_val; + long res; + + ret_val = -1; + res = get_long_parameter(CONST_MSG_ID_KEY_NAME, err_flg); + if (*err_flg == PLP_OK) { + ret_val = res; + } + return ret_val; +} + +string BusMessage::get_string_parameter(string arg_name_param, int *err_flg) { + string ret_val; + DataItem *item; + DataItemSequence *seq; + const char *ch; + + *err_flg = PLP_ERR_DATA_NOT_FOUND; + seq = (DataItemSequence *)_dataItemSeq; + item = get_dataitem_by_param_name(seq, arg_name_param); + if (item != NULL) { + //item->value >>= CORBA::Any::to_string(ch, 0); + ch = item->str_value; + ret_val = ch; + *err_flg = PLP_OK; + } + return ret_val; +} + +long BusMessage::get_long_parameter(string arg_name_param, int *err_flg) { + long ret_val; + DataItem *item; + DataItemSequence *seq; + + ret_val = 0; + *err_flg = PLP_ERR_DATA_NOT_FOUND; + seq = (DataItemSequence *)_dataItemSeq; + item = get_dataitem_by_param_name(seq, arg_name_param); + if (item != NULL) { + if (item->value >>= ret_val) { + *err_flg = PLP_OK; + } + } + return ret_val; +} + +int BusMessage::get_int_parameter(string arg_name_param, int *err_flg) { + int ret_val; + DataItem *item; + DataItemSequence *seq; + long tmp; + + ret_val = 0; + *err_flg = PLP_ERR_DATA_NOT_FOUND; + seq = (DataItemSequence *)_dataItemSeq; + item = get_dataitem_by_param_name(seq, arg_name_param); + if (item != NULL) { + if (item->value >>= tmp) { + ret_val = (int)tmp; + *err_flg = PLP_OK; + } + } + return ret_val; +} + +double BusMessage::get_double_parameter(string arg_name_param, int *err_flg) { + double ret_val; + DataItem *item; + DataItemSequence *seq; + + ret_val = 0; + *err_flg = PLP_ERR_DATA_NOT_FOUND; + seq = (DataItemSequence *)_dataItemSeq; + item = get_dataitem_by_param_name(seq, arg_name_param); + if (item != NULL) { + if (item->value >>= ret_val) + *err_flg = PLP_OK; + } + return ret_val; +} + +float BusMessage::get_float_parameter(string arg_name_param, int *err_flg) { + float ret_val; + DataItem *item; + DataItemSequence *seq; + + ret_val = 0; + *err_flg = PLP_ERR_DATA_NOT_FOUND; + seq = (DataItemSequence *)_dataItemSeq; + item = get_dataitem_by_param_name(seq, arg_name_param); + if (item != NULL) { + if (item->value >>= ret_val) + *err_flg = PLP_OK; + } + return ret_val; +} + +unsigned long BusMessage::get_parameter_count() { + int ret_val; + DataItemSequence *seq; + + seq = (DataItemSequence *)_dataItemSeq; + ret_val = seq->length(); + 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], value: %s\n", index, 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; @@ -199,7 +328,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; @@ -207,12 +336,18 @@ 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); + { + const char *val; + val = dataitem->str_value; + log_debug("\t[%ld] %s: %s\n", index, name, val); + } + break; + log_error("\t[%ld], name: %s, value unknown\n", index, name); } } else {