4 * Created on: Aug 17, 2010
10 #include "BusMessage.hh"
11 #include "RequestResponseBus.hh"
14 using namespace plpbus_orb;
15 using namespace plpbus;
16 using namespace CORBA;
18 #define CONST_MSG_ID_KEY_NAME "_msgtype"
20 BusMessage::BusMessage() {
21 _dataItemSeq = new DataItemSequence(0);
24 BusMessage::BusMessage(long type_param) {
25 _dataItemSeq = new DataItemSequence(0);
27 add_long_parameter(CONST_MSG_ID_KEY_NAME, type_param);
30 BusMessage::BusMessage(long type_param,
31 const char *arg_name_param,
32 const char *arg_string_value_param) {
33 _dataItemSeq = new DataItemSequence(0);
34 add_long_parameter(CONST_MSG_ID_KEY_NAME, type_param);
35 add_string_parameter(arg_name_param, arg_string_value_param);
38 BusMessage::~BusMessage() {
41 int BusMessage::add_string_parameter(const char *arg_name_param, const char *value_param)
46 DataItemSequence *seq;
49 seq = (DataItemSequence *)_dataItemSeq;
50 if (arg_name_param != NULL) {
51 length = seq->length();
52 item = new DataItem();
53 item->name = strdup(arg_name_param);
54 if (value_param != NULL) {
55 item->value <<= strdup(value_param);
56 seq->length(length + 1);
57 (*seq)[length] = *item;
66 int BusMessage::add_long_parameter(const char *arg_name_param, long value_param)
71 DataItemSequence *seq;
74 seq = (DataItemSequence *)_dataItemSeq;
75 if (arg_name_param != NULL) {
76 length = seq->length();
77 item = new DataItem();
78 item->name = strdup(arg_name_param);
79 item->value <<= value_param;
81 seq->length(length + 1);
82 (*seq)[length] = *item;
90 int BusMessage::add_int_parameter(const char *arg_name_param, int value_param)
95 DataItemSequence *seq;
98 seq = (DataItemSequence *)_dataItemSeq;
99 if (arg_name_param != NULL) {
100 length = seq->length();
101 item = new DataItem();
102 item->name = strdup(arg_name_param);
103 item->value <<= (long)value_param;
105 seq->length(length + 1);
106 (*seq)[length] = *item;
114 int BusMessage::add_double_parameter(const char *arg_name_param, double value_param)
119 DataItemSequence *seq;
122 log_debug("add_double_parameter() started\n");
123 seq = (DataItemSequence *)_dataItemSeq;
124 if (arg_name_param != NULL) {
125 length = seq->length();
126 item = new DataItem();
127 item->name = strdup(arg_name_param);
128 item->value <<= (long)value_param;
130 seq->length(length + 1);
131 (*seq)[length] = *item;
136 log_debug("add_double_parameter() done\n");
140 int BusMessage::add_float_parameter(const char *arg_name_param, float value_param)
145 DataItemSequence *seq;
148 seq = (DataItemSequence *)_dataItemSeq;
149 if (arg_name_param != NULL) {
150 length = seq->length();
151 item = new DataItem();
152 item->name = strdup(arg_name_param);
153 item->value <<= (long)value_param;
155 seq->length(length + 1);
156 (*seq)[length] = *item;
164 static DataItem *get_dataitem_by_param_name(DataItemSequence *seq, const char *arg_name_param) {
168 const char *item_name;
171 count = seq->length();
172 for (long ii = 0; ii < count; ii++) {
174 item_name = item->name;
175 if (strcmp(arg_name_param, item_name) == 0) {
183 bool BusMessage::get_type(long *type_param) {
187 ret_val = get_long_parameter(CONST_MSG_ID_KEY_NAME, &res);
188 if (ret_val == true) {
194 bool BusMessage::get_string_parameter(const char *arg_name_param, const char **value_param) {
197 DataItemSequence *seq;
200 seq = (DataItemSequence *)_dataItemSeq;
201 item = get_dataitem_by_param_name(seq, arg_name_param);
203 item->value >>= *value_param;
209 bool BusMessage::get_long_parameter(const char *arg_name_param, long *value_param) {
212 DataItemSequence *seq;
215 seq = (DataItemSequence *)_dataItemSeq;
216 item = get_dataitem_by_param_name(seq, arg_name_param);
218 item->value >>= *value_param;
224 bool BusMessage::get_int_parameter(const char *arg_name_param, int *value_param) {
227 DataItemSequence *seq;
231 seq = (DataItemSequence *)_dataItemSeq;
232 item = get_dataitem_by_param_name(seq, arg_name_param);
235 *value_param = (int)tmp;
241 bool BusMessage::get_double_parameter(const char *arg_name_param, double *value_param) {
244 DataItemSequence *seq;
247 seq = (DataItemSequence *)_dataItemSeq;
248 item = get_dataitem_by_param_name(seq, arg_name_param);
250 item->value >>= *value_param;
256 bool BusMessage::get_float_parameter(const char *arg_name_param, float *value_param) {
259 DataItemSequence *seq;
262 seq = (DataItemSequence *)_dataItemSeq;
263 item = get_dataitem_by_param_name(seq, arg_name_param);
265 item->value >>= *value_param;
271 void BusMessage::printout_dataitem(long index, void *item) {
276 dataitem = (DataItem *)item;
278 if (dataitem->name != NULL) {
279 name = dataitem->name;
280 kind = dataitem->value.type()->kind();
286 dataitem->value >>= val;
287 log_debug("\t[%ld] %s: %s\n", index, name, val);
293 dataitem->value >>= val;
294 log_debug("\t[%ld] %s: %ld\n", index, name, val);
295 //val_str = strdup("long");
301 dataitem->value >>= val;
302 log_debug("\t[%ld] %s: %f\n", index, name, val);
303 //val_str = strdup("double");
309 dataitem->value >>= val;
310 log_debug("\t[l%ld] %s: %f\n", index, name, val);
311 //val_str = strdup("float");
315 log_error("\t[%ld], name: %s, value unknown\n", index, name);
319 log_error("\t[%ld] Invalid data item name name or value\n", index);
323 log_error("\t[%ld] dataItem NULL.", index);
327 void BusMessage::printout() {
330 DataItemSequence *seq;
332 seq = (DataItemSequence *)_dataItemSeq;
333 count = seq->length();
334 log_debug("BusMessage.printout(): parameter count: %ld\n", count);
335 for (long ii = 0; ii < count; ii++) {
337 printout_dataitem(ii, &item);
339 log_debug("BusMessage.printout() done\n");;