4 * Created on: Aug 17, 2010
9 #include <omniORB4/CORBA.h>
12 #include <plp/retval.h>
14 #include "BusMessage.hh"
15 #include "RequestResponseBus.hh"
18 using namespace plpbus_orb;
19 using namespace plpbus;
20 using namespace CORBA;
22 #define CONST_MSG_ID_KEY_NAME "_msgtype"
24 BusMessage::BusMessage() {
25 _dataItemSeq = new DataItemSequence(0);
28 BusMessage::BusMessage(long type_param) {
29 _dataItemSeq = new DataItemSequence(0);
31 add_long_parameter(CONST_MSG_ID_KEY_NAME, type_param);
34 BusMessage::BusMessage(long type_param,
35 const char *arg_name_param,
36 const char *arg_string_value_param) {
37 _dataItemSeq = new DataItemSequence(0);
38 add_long_parameter(CONST_MSG_ID_KEY_NAME, type_param);
39 add_string_parameter(arg_name_param, arg_string_value_param);
42 BusMessage::~BusMessage() {
45 int BusMessage::add_string_parameter(string arg_name_param, string value_param)
50 DataItemSequence *seq;
53 seq = (DataItemSequence *)_dataItemSeq;
54 if (arg_name_param.empty() == false) {
55 length = seq->length();
56 item = new DataItem();
57 item->name = strdup(arg_name_param.c_str());
58 item->value <<= strdup(value_param.c_str());
59 seq->length(length + 1);
60 (*seq)[length] = *item;
68 int BusMessage::add_long_parameter(const char *arg_name_param, long value_param)
73 DataItemSequence *seq;
76 seq = (DataItemSequence *)_dataItemSeq;
77 if (arg_name_param != NULL) {
78 length = seq->length();
79 item = new DataItem();
80 item->name = strdup(arg_name_param);
81 item->value <<= value_param;
83 seq->length(length + 1);
84 (*seq)[length] = *item;
92 int BusMessage::add_int_parameter(string arg_name_param, int value_param)
97 DataItemSequence *seq;
100 seq = (DataItemSequence *)_dataItemSeq;
101 if (arg_name_param.empty() == false) {
102 length = seq->length();
103 item = new DataItem();
104 item->name = strdup(arg_name_param.c_str());
105 item->value <<= (long)value_param;
107 seq->length(length + 1);
108 (*seq)[length] = *item;
116 int BusMessage::add_double_parameter(const char *arg_name_param, double value_param)
121 DataItemSequence *seq;
124 log_debug("add_double_parameter() started\n");
125 seq = (DataItemSequence *)_dataItemSeq;
126 if (arg_name_param != NULL) {
127 length = seq->length();
128 item = new DataItem();
129 item->name = strdup(arg_name_param);
130 item->value <<= (long)value_param;
132 seq->length(length + 1);
133 (*seq)[length] = *item;
138 log_debug("add_double_parameter() done\n");
142 int BusMessage::add_float_parameter(const char *arg_name_param, float value_param)
147 DataItemSequence *seq;
150 seq = (DataItemSequence *)_dataItemSeq;
151 if (arg_name_param != NULL) {
152 length = seq->length();
153 item = new DataItem();
154 item->name = strdup(arg_name_param);
155 item->value <<= (long)value_param;
157 seq->length(length + 1);
158 (*seq)[length] = *item;
166 static DataItem *get_dataitem_by_param_name(DataItemSequence *seq, string arg_name_param) {
170 const char *item_name;
173 count = seq->length();
174 for (long ii = 0; ii < count; ii++) {
176 item_name = item->name;
177 if (strcmp(arg_name_param.c_str(), item_name) == 0) {
185 long BusMessage::get_type(int *err_flg) {
189 res = get_long_parameter(CONST_MSG_ID_KEY_NAME, err_flg);
190 if (*err_flg == PLP_OK) {
196 string BusMessage::get_string_parameter(string arg_name_param, int *err_flg) {
199 DataItemSequence *seq;
202 *err_flg = PLP_ERR_DATA_NOT_FOUND;
203 seq = (DataItemSequence *)_dataItemSeq;
204 item = get_dataitem_by_param_name(seq, arg_name_param);
206 item->value >>= CORBA::Any::to_string(ch, 0);
213 long BusMessage::get_long_parameter(string arg_name_param, int *err_flg) {
216 DataItemSequence *seq;
218 *err_flg = PLP_ERR_DATA_NOT_FOUND;
219 seq = (DataItemSequence *)_dataItemSeq;
220 item = get_dataitem_by_param_name(seq, arg_name_param);
222 item->value >>= ret_val;
228 int BusMessage::get_int_parameter(string arg_name_param, int *err_flg) {
231 DataItemSequence *seq;
234 *err_flg = PLP_ERR_DATA_NOT_FOUND;
235 seq = (DataItemSequence *)_dataItemSeq;
236 item = get_dataitem_by_param_name(seq, arg_name_param);
245 double BusMessage::get_double_parameter(string arg_name_param, int *err_flg) {
248 DataItemSequence *seq;
250 *err_flg = PLP_ERR_DATA_NOT_FOUND;
251 seq = (DataItemSequence *)_dataItemSeq;
252 item = get_dataitem_by_param_name(seq, arg_name_param);
254 item->value >>= ret_val;
260 float BusMessage::get_float_parameter(string arg_name_param, int *err_flg) {
263 DataItemSequence *seq;
265 *err_flg = PLP_ERR_DATA_NOT_FOUND;
266 seq = (DataItemSequence *)_dataItemSeq;
267 item = get_dataitem_by_param_name(seq, arg_name_param);
269 item->value >>= ret_val;
275 void BusMessage::printout_dataitem(long index, void *item) {
280 dataitem = (DataItem *)item;
282 if (dataitem->name != NULL) {
283 name = dataitem->name;
284 kind = dataitem->value.type()->kind();
290 dataitem->value >>= val;
291 log_debug("\t[%ld] %s: %s\n", index, name, val);
297 dataitem->value >>= val;
298 log_debug("\t[%ld] %s: %ld\n", index, name, val);
299 //val_str = strdup("long");
305 dataitem->value >>= val;
306 log_debug("\t[%ld] %s: %f\n", index, name, val);
307 //val_str = strdup("double");
313 dataitem->value >>= val;
314 log_debug("\t[l%ld] %s: %f\n", index, name, val);
315 //val_str = strdup("float");
319 log_error("\t[%ld], name: %s, value unknown\n", index, name);
323 log_error("\t[%ld] Invalid data item name name or value\n", index);
327 log_error("\t[%ld] dataItem NULL.", index);
331 void BusMessage::printout() {
334 DataItemSequence *seq;
336 seq = (DataItemSequence *)_dataItemSeq;
337 count = seq->length();
338 log_debug("BusMessage.printout(): parameter count: %ld\n", count);
339 for (long ii = 0; ii < count; ii++) {
341 printout_dataitem(ii, &item);
343 log_debug("BusMessage.printout() done\n");;