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() {
43 DataItemSequence *seq;
46 seq = (DataItemSequence *)_dataItemSeq;
52 int BusMessage::add_cstring_parameter(const char *arg_name_param, const char *value_param) {
55 DataItemSequence *seq;
59 seq = (DataItemSequence *)_dataItemSeq;
60 if (arg_name_param != NULL) {
64 item->name = arg_name_param;
65 item->str_value = value_param;
73 int BusMessage::add_string_parameter(string arg_name_param, string value_param)
77 DataItemSequence *seq;
80 //str = (const char)"hooo";
82 seq = (DataItemSequence *)_dataItemSeq;
83 if (arg_name_param.empty() == false) {
87 item->name = arg_name_param.c_str();
88 item->str_value = value_param.c_str();
96 int BusMessage::add_long_parameter(string arg_name_param, long value_param)
100 DataItemSequence *seq;
103 seq = (DataItemSequence *)_dataItemSeq;
104 if (arg_name_param.empty() == false) {
105 length = seq->length();
106 seq->length(length + 1);
107 (*seq)[length].name = arg_name_param.c_str();
108 (*seq)[length].value <<= value_param;
109 (*seq)[length].str_value = "";
117 int BusMessage::add_int_parameter(string arg_name_param, int value_param)
121 DataItemSequence *seq;
124 seq = (DataItemSequence *)_dataItemSeq;
125 if (arg_name_param.empty() == false) {
126 length = seq->length();
127 seq->length(length + 1);
128 (*seq)[length].name = arg_name_param.c_str();
129 (*seq)[length].value <<= (long)value_param;
130 (*seq)[length].str_value = "";
138 int BusMessage::add_double_parameter(string arg_name_param, double value_param)
142 DataItemSequence *seq;
145 log_debug("add_double_parameter() started\n");
146 seq = (DataItemSequence *)_dataItemSeq;
147 if (arg_name_param.empty() == false) {
148 length = seq->length();
149 seq->length(length + 1);
150 (*seq)[length].name = arg_name_param.c_str();
151 (*seq)[length].value <<= (double)value_param;
152 (*seq)[length].str_value = "";
157 log_debug("add_double_parameter() done\n");
161 int BusMessage::add_float_parameter(string arg_name_param, float value_param)
165 DataItemSequence *seq;
168 seq = (DataItemSequence *)_dataItemSeq;
169 if (arg_name_param.empty() == false) {
170 length = seq->length();
171 seq->length(length + 1);
172 (*seq)[length].name = arg_name_param.c_str();
173 (*seq)[length].value <<= (float)value_param;
174 (*seq)[length].str_value = "";
182 static DataItem *get_dataitem_by_param_name(DataItemSequence *seq, string arg_name_param) {
186 const char *item_name;
189 count = seq->length();
190 for (long ii = 0; ii < count; ii++) {
192 item_name = item->name;
193 if (strcmp(arg_name_param.c_str(), item_name) == 0) {
201 long BusMessage::get_type(int *err_flg) {
206 res = get_long_parameter(CONST_MSG_ID_KEY_NAME, err_flg);
207 if (*err_flg == PLP_OK) {
213 string BusMessage::get_string_parameter(string arg_name_param, int *err_flg) {
216 DataItemSequence *seq;
219 *err_flg = PLP_ERR_DATA_NOT_FOUND;
220 seq = (DataItemSequence *)_dataItemSeq;
221 item = get_dataitem_by_param_name(seq, arg_name_param);
223 //item->value >>= CORBA::Any::to_string(ch, 0);
224 ch = item->str_value;
231 long BusMessage::get_long_parameter(string arg_name_param, int *err_flg) {
234 DataItemSequence *seq;
237 *err_flg = PLP_ERR_DATA_NOT_FOUND;
238 seq = (DataItemSequence *)_dataItemSeq;
239 item = get_dataitem_by_param_name(seq, arg_name_param);
241 if (item->value >>= ret_val) {
248 int BusMessage::get_int_parameter(string arg_name_param, int *err_flg) {
251 DataItemSequence *seq;
255 *err_flg = PLP_ERR_DATA_NOT_FOUND;
256 seq = (DataItemSequence *)_dataItemSeq;
257 item = get_dataitem_by_param_name(seq, arg_name_param);
259 if (item->value >>= tmp) {
267 double BusMessage::get_double_parameter(string arg_name_param, int *err_flg) {
270 DataItemSequence *seq;
273 *err_flg = PLP_ERR_DATA_NOT_FOUND;
274 seq = (DataItemSequence *)_dataItemSeq;
275 item = get_dataitem_by_param_name(seq, arg_name_param);
277 if (item->value >>= ret_val)
283 float BusMessage::get_float_parameter(string arg_name_param, int *err_flg) {
286 DataItemSequence *seq;
289 *err_flg = PLP_ERR_DATA_NOT_FOUND;
290 seq = (DataItemSequence *)_dataItemSeq;
291 item = get_dataitem_by_param_name(seq, arg_name_param);
293 if (item->value >>= ret_val)
299 unsigned long BusMessage::get_parameter_count() {
301 DataItemSequence *seq;
303 seq = (DataItemSequence *)_dataItemSeq;
304 ret_val = seq->length();
308 void BusMessage::printout_dataitem(long index, void *item) {
313 dataitem = (DataItem *)item;
315 if (dataitem->name != NULL) {
316 name = dataitem->name;
317 kind = dataitem->value.type()->kind();
322 dataitem->value >>= val;
323 log_debug("\t[%ld] %s: %ld\n", index, name, val);
324 //val_str = strdup("long");
330 dataitem->value >>= val;
331 log_debug("\t[%ld] %s: %f\n", index, name, val);
332 //val_str = strdup("double");
338 dataitem->value >>= val;
339 log_debug("\t[l%ld] %s: %f\n", index, name, val);
340 //val_str = strdup("float");
346 val = dataitem->str_value;
347 log_debug("\t[%ld] %s: %s\n", index, name, val);
350 log_error("\t[%ld], name: %s, value unknown\n", index, name);
354 log_error("\t[%ld] Invalid data item name name or value\n", index);
358 log_error("\t[%ld] dataItem NULL.", index);
362 void BusMessage::printout() {
365 DataItemSequence *seq;
367 seq = (DataItemSequence *)_dataItemSeq;
368 count = seq->length();
369 log_debug("BusMessage.printout(): parameter count: %ld\n", count);
370 for (long ii = 0; ii < count; ii++) {
372 printout_dataitem(ii, &item);
374 log_debug("BusMessage.printout() done\n");;