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() {
44 DataItemSequence *seq;
46 log_debug("BusMessage DESTRUCTOR\n");
47 seq = (DataItemSequence *)_dataItemSeq;
53 for (long ii = 0; ii < cnt; ii++) {
55 log_debug("deleting BusMessage item:\n");
56 printout_dataitem(ii, item);
64 int BusMessage::add_cstring_parameter(const char *arg_name_param, const char *value_param) {
67 DataItemSequence *seq;
71 seq = (DataItemSequence *)_dataItemSeq;
72 if (arg_name_param != NULL) {
76 item->name = arg_name_param;
77 item->str_value = value_param;
85 int BusMessage::add_string_parameter(string arg_name_param, string value_param)
89 DataItemSequence *seq;
92 //str = (const char)"hooo";
94 seq = (DataItemSequence *)_dataItemSeq;
95 if (arg_name_param.empty() == false) {
99 item->name = arg_name_param.c_str();
100 item->str_value = value_param.c_str();
108 int BusMessage::add_long_parameter(string arg_name_param, long value_param)
112 DataItemSequence *seq;
115 seq = (DataItemSequence *)_dataItemSeq;
116 if (arg_name_param.empty() == false) {
117 length = seq->length();
118 seq->length(length + 1);
119 (*seq)[length].name = arg_name_param.c_str();
120 (*seq)[length].value <<= value_param;
121 (*seq)[length].str_value = "";
129 int BusMessage::add_int_parameter(string arg_name_param, int value_param)
133 DataItemSequence *seq;
136 seq = (DataItemSequence *)_dataItemSeq;
137 if (arg_name_param.empty() == false) {
138 length = seq->length();
139 seq->length(length + 1);
140 (*seq)[length].name = arg_name_param.c_str();
141 (*seq)[length].value <<= (long)value_param;
142 (*seq)[length].str_value = "";
150 int BusMessage::add_double_parameter(string arg_name_param, double value_param)
154 DataItemSequence *seq;
157 log_debug("add_double_parameter() started\n");
158 seq = (DataItemSequence *)_dataItemSeq;
159 if (arg_name_param.empty() == false) {
160 length = seq->length();
161 seq->length(length + 1);
162 (*seq)[length].name = arg_name_param.c_str();
163 (*seq)[length].value <<= (double)value_param;
164 (*seq)[length].str_value = "";
169 log_debug("add_double_parameter() done\n");
173 int BusMessage::add_float_parameter(string arg_name_param, float value_param)
177 DataItemSequence *seq;
180 seq = (DataItemSequence *)_dataItemSeq;
181 if (arg_name_param.empty() == false) {
182 length = seq->length();
183 seq->length(length + 1);
184 (*seq)[length].name = arg_name_param.c_str();
185 (*seq)[length].value <<= (float)value_param;
186 (*seq)[length].str_value = "";
194 static DataItem *get_dataitem_by_param_name(DataItemSequence *seq, string arg_name_param) {
198 const char *item_name;
201 count = seq->length();
202 for (long ii = 0; ii < count; ii++) {
204 item_name = item->name;
205 if (strcmp(arg_name_param.c_str(), item_name) == 0) {
213 long BusMessage::get_type(int *err_flg) {
218 res = get_long_parameter(CONST_MSG_ID_KEY_NAME, err_flg);
219 if (*err_flg == PLP_OK) {
225 string BusMessage::get_string_parameter(string arg_name_param, int *err_flg) {
228 DataItemSequence *seq;
231 *err_flg = PLP_ERR_DATA_NOT_FOUND;
232 seq = (DataItemSequence *)_dataItemSeq;
233 item = get_dataitem_by_param_name(seq, arg_name_param);
235 //item->value >>= CORBA::Any::to_string(ch, 0);
236 ch = item->str_value;
243 long BusMessage::get_long_parameter(string arg_name_param, int *err_flg) {
246 DataItemSequence *seq;
249 *err_flg = PLP_ERR_DATA_NOT_FOUND;
250 seq = (DataItemSequence *)_dataItemSeq;
251 item = get_dataitem_by_param_name(seq, arg_name_param);
253 item->value >>= ret_val;
259 int BusMessage::get_int_parameter(string arg_name_param, int *err_flg) {
262 DataItemSequence *seq;
266 *err_flg = PLP_ERR_DATA_NOT_FOUND;
267 seq = (DataItemSequence *)_dataItemSeq;
268 item = get_dataitem_by_param_name(seq, arg_name_param);
277 double BusMessage::get_double_parameter(string arg_name_param, int *err_flg) {
280 DataItemSequence *seq;
283 *err_flg = PLP_ERR_DATA_NOT_FOUND;
284 seq = (DataItemSequence *)_dataItemSeq;
285 item = get_dataitem_by_param_name(seq, arg_name_param);
287 item->value >>= ret_val;
293 float BusMessage::get_float_parameter(string arg_name_param, int *err_flg) {
296 DataItemSequence *seq;
299 *err_flg = PLP_ERR_DATA_NOT_FOUND;
300 seq = (DataItemSequence *)_dataItemSeq;
301 item = get_dataitem_by_param_name(seq, arg_name_param);
303 item->value >>= ret_val;
309 void BusMessage::printout_dataitem(long index, void *item) {
314 dataitem = (DataItem *)item;
316 if (dataitem->name != NULL) {
317 name = dataitem->name;
318 kind = dataitem->value.type()->kind();
323 dataitem->value >>= val;
324 log_debug("\t[%ld] %s: %ld\n", index, name, val);
325 //val_str = strdup("long");
331 dataitem->value >>= val;
332 log_debug("\t[%ld] %s: %f\n", index, name, val);
333 //val_str = strdup("double");
339 dataitem->value >>= val;
340 log_debug("\t[l%ld] %s: %f\n", index, name, val);
341 //val_str = strdup("float");
347 val = dataitem->str_value;
348 log_debug("\t[%ld] %s: %s\n", index, name, val);
351 log_error("\t[%ld], name: %s, value unknown\n", index, name);
355 log_error("\t[%ld] Invalid data item name name or value\n", index);
359 log_error("\t[%ld] dataItem NULL.", index);
363 void BusMessage::printout() {
366 DataItemSequence *seq;
368 seq = (DataItemSequence *)_dataItemSeq;
369 count = seq->length();
370 log_debug("BusMessage.printout(): parameter count: %ld\n", count);
371 for (long ii = 0; ii < count; ii++) {
372 printf("item[%ld]\n", ii);
374 printout_dataitem(ii, &item);
376 log_debug("BusMessage.printout() done\n");;