]> pilppa.org Git - libplpbus.git/blobdiff - src/plpbus/BusMessage.cc
Added methods for querying paramerer values from the message parameter
[libplpbus.git] / src / plpbus / BusMessage.cc
index 1743d4c8c807dc82ba7f47898c5f95a81bf15754..7cab6e9d8f48edfb410c60e244d8bb58257211b2 100644 (file)
@@ -15,34 +15,30 @@ 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;
-       DataItemSequence        *seq;
+BusMessage::BusMessage(long type_param) {
+       _dataItemSeq    = new DataItemSequence(0);
 
-       if (name_param != NULL) {
-               item            = new DataItem();
-               item->name      = strdup(name_param);
-               item->value     <<= strdup(value_param);
+       add_long_parameter(CONST_MSG_ID_KEY_NAME, type_param);
+}
 
-               seq     = new DataItemSequence(0);
-               seq->length(1);
-               (*seq)[0]       = *item;
-               _dataItemSeq    = seq;
-       }
-       else {
-               _dataItemSeq    = new DataItemSequence(0);
-       }
+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 *name_param, const char *value_param)
+int BusMessage::add_string_parameter(const char *arg_name_param, const char *value_param)
 {
        long                    length;
        int                     ret_val;
@@ -51,10 +47,10 @@ int BusMessage::add_string_parameter(const char *name_param, const char *value_p
 
        ret_val = 0;
        seq     = (DataItemSequence *)_dataItemSeq;
-       if (name_param != NULL) {
+       if (arg_name_param != NULL) {
                length          = seq->length();
                item            = new DataItem();
-               item->name      = strdup(name_param);
+               item->name      = strdup(arg_name_param);
                if (value_param != NULL) {
                        item->value     <<= strdup(value_param);
                        seq->length(length + 1);
@@ -62,13 +58,12 @@ int BusMessage::add_string_parameter(const char *name_param, const char *value_p
                }
        }
        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(const char *arg_name_param, long value_param)
 {
        long                    length;
        int                     ret_val;
@@ -77,23 +72,22 @@ int BusMessage::add_long_parameter(const char *name_param, long value_param)
 
        ret_val = 0;
        seq     = (DataItemSequence *)_dataItemSeq;
-       if (name_param != NULL) {
+       if (arg_name_param != NULL) {
                length          = seq->length();
                item            = new DataItem();
-               item->name      = strdup(name_param);
+               item->name      = strdup(arg_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)
+int BusMessage::add_int_parameter(const char *arg_name_param, int value_param)
 {
        long                    length;
        int                     ret_val;
@@ -102,23 +96,22 @@ int BusMessage::add_int_parameter(const char *name_param, int value_param)
 
        ret_val = 0;
        seq     = (DataItemSequence *)_dataItemSeq;
-       if (name_param != NULL) {
+       if (arg_name_param != NULL) {
                length          = seq->length();
                item            = new DataItem();
-               item->name      = strdup(name_param);
+               item->name      = strdup(arg_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)
+int BusMessage::add_double_parameter(const char *arg_name_param, double value_param)
 {
        long                    length;
        int                     ret_val;
@@ -128,24 +121,23 @@ int BusMessage::add_double_parameter(const char *name_param, double value_param)
        ret_val = 0;
        log_debug("add_double_parameter() started\n");
        seq     = (DataItemSequence *)_dataItemSeq;
-       if (name_param != NULL) {
+       if (arg_name_param != NULL) {
                length          = seq->length();
                item            = new DataItem();
-               item->name      = strdup(name_param);
+               item->name      = strdup(arg_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)
+int BusMessage::add_float_parameter(const char *arg_name_param, float value_param)
 {
        long                    length;
        int                     ret_val;
@@ -154,29 +146,137 @@ int BusMessage::add_float_parameter(const char *name_param, float value_param)
 
        ret_val = 0;
        seq     = (DataItemSequence *)_dataItemSeq;
-       if (name_param != NULL) {
+       if (arg_name_param != NULL) {
                length          = seq->length();
                item            = new DataItem();
-               item->name      = strdup(name_param);
+               item->name      = strdup(arg_name_param);
                item->value     <<= (long)value_param;
 
                seq->length(length + 1);
                (*seq)[length]  = *item;
        }
        else {
-               seq->length(0);
                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:
@@ -184,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;
@@ -199,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;
@@ -207,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 {