/* * 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; BusMessage::BusMessage() { _dataItemSeq = new DataItemSequence(); log_debug("new BusMessage()\n"); } BusMessage::BusMessage(const char *name_param, const char *value_param) { DataItem *item; DataItemSequence *seq; if (name_param != NULL) { item = new DataItem(); item->name = strdup(name_param); item->value <<= strdup(value_param); seq = new DataItemSequence(0); seq->length(1); (*seq)[0] = *item; _dataItemSeq = seq; } else { _dataItemSeq = new DataItemSequence(0); } } BusMessage::~BusMessage() { } int BusMessage::add_string_parameter(const char *name_param, const char *value_param) { long length; int ret_val; DataItem *item; DataItemSequence *seq; 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; } } else { seq->length(0); ret_val = -1; } return ret_val; } int BusMessage::add_long_parameter(const char *name_param, long value_param) { long length; int ret_val; DataItem *item; DataItemSequence *seq; ret_val = 0; seq = (DataItemSequence *)_dataItemSeq; if (name_param != NULL) { length = seq->length(); item = new DataItem(); item->name = strdup(name_param); item->value <<= value_param; seq->length(length + 1); (*seq)[length] = *item; } else { seq->length(0); ret_val = -1; } return ret_val; } int BusMessage::add_int_parameter(const char *name_param, int value_param) { long length; int ret_val; DataItem *item; DataItemSequence *seq; ret_val = 0; seq = (DataItemSequence *)_dataItemSeq; if (name_param != NULL) { length = seq->length(); item = new DataItem(); item->name = strdup(name_param); item->value <<= (long)value_param; seq->length(length + 1); (*seq)[length] = *item; } else { seq->length(0); ret_val = -1; } return ret_val; } int BusMessage::add_double_parameter(const char *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) { length = seq->length(); item = new DataItem(); item->name = strdup(name_param); item->value <<= (long)value_param; seq->length(length + 1); (*seq)[length] = *item; } 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) { long length; int ret_val; DataItem *item; DataItemSequence *seq; ret_val = 0; seq = (DataItemSequence *)_dataItemSeq; if (name_param != NULL) { length = seq->length(); item = new DataItem(); item->name = strdup(name_param); item->value <<= (long)value_param; seq->length(length + 1); (*seq)[length] = *item; } else { seq->length(0); ret_val = -1; } return ret_val; } void BusMessage::printout_dataitem(long index, void *item) { CORBA::TCKind kind; DataItem *dataitem; dataitem = (DataItem *)item; if (item != NULL) { if (dataitem->name != NULL) { 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); //val_str = strdup("long"); } break; case tk_double: { double val; dataitem->value >>= val; log_debug("\t[%ld], value: %f\n", index, val); //val_str = strdup("double"); } break; case tk_float: { float val; dataitem->value >>= val; log_debug("\t[l%ld] value: %f\n", index, val); //val_str = strdup("float"); } break; default: log_error("\t[%ld], value unknown\n", index); } } 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");; }