]> pilppa.org Git - libplpbus.git/blob - src/plpbus/BusMessage.cc
cleaned up public headers available for bus client and server
[libplpbus.git] / src / plpbus / BusMessage.cc
1 /*
2  * BusMessage.cpp
3  *
4  *  Created on: Aug 17, 2010
5  *      Author: lamikr
6  */
7
8 #include <plp/log.h>
9
10 #include "BusMessage.hh"
11 #include "RequestResponseBus.hh"
12
13 using namespace std;
14 using namespace plpbus_orb;
15 using namespace plpbus;
16 using namespace CORBA;
17
18 BusMessage::BusMessage() {
19         _dataItemSeq    = new DataItemSequence();
20         log_debug("new BusMessage()\n");
21 }
22
23 BusMessage::BusMessage(const char *name_param, const char *value_param) {
24         DataItem                *item;
25         DataItemSequence        *seq;
26
27         if (name_param != NULL) {
28                 item            = new DataItem();
29                 item->name      = strdup(name_param);
30                 item->value     <<= strdup(value_param);
31
32                 seq     = new DataItemSequence(0);
33                 seq->length(1);
34                 (*seq)[0]       = *item;
35                 _dataItemSeq    = seq;
36         }
37         else {
38                 _dataItemSeq    = new DataItemSequence(0);
39         }
40 }
41
42 BusMessage::~BusMessage() {
43 }
44
45 int BusMessage::add_string_parameter(const char *name_param, const char *value_param)
46 {
47         long                    length;
48         int                     ret_val;
49         DataItem                *item;
50         DataItemSequence        *seq;
51
52         ret_val = 0;
53         seq     = (DataItemSequence *)_dataItemSeq;
54         if (name_param != NULL) {
55                 length          = seq->length();
56                 item            = new DataItem();
57                 item->name      = strdup(name_param);
58                 if (value_param != NULL) {
59                         item->value     <<= strdup(value_param);
60                         seq->length(length + 1);
61                         (*seq)[length]  = *item;
62                 }
63         }
64         else {
65                 seq->length(0);
66                 ret_val = -1;
67         }
68         return ret_val;
69 }
70
71 int BusMessage::add_long_parameter(const char *name_param, long value_param)
72 {
73         long                    length;
74         int                     ret_val;
75         DataItem                *item;
76         DataItemSequence        *seq;
77
78         ret_val = 0;
79         seq     = (DataItemSequence *)_dataItemSeq;
80         if (name_param != NULL) {
81                 length          = seq->length();
82                 item            = new DataItem();
83                 item->name      = strdup(name_param);
84                 item->value     <<= value_param;
85
86                 seq->length(length + 1);
87                 (*seq)[length]  = *item;
88         }
89         else {
90                 seq->length(0);
91                 ret_val = -1;
92         }
93         return ret_val;
94 }
95
96 int BusMessage::add_int_parameter(const char *name_param, int value_param)
97 {
98         long                    length;
99         int                     ret_val;
100         DataItem                *item;
101         DataItemSequence        *seq;
102
103         ret_val = 0;
104         seq     = (DataItemSequence *)_dataItemSeq;
105         if (name_param != NULL) {
106                 length          = seq->length();
107                 item            = new DataItem();
108                 item->name      = strdup(name_param);
109                 item->value     <<= (long)value_param;
110
111                 seq->length(length + 1);
112                 (*seq)[length]  = *item;
113         }
114         else {
115                 seq->length(0);
116                 ret_val = -1;
117         }
118         return ret_val;
119 }
120
121 int BusMessage::add_double_parameter(const char *name_param, double value_param)
122 {
123         long                    length;
124         int                     ret_val;
125         DataItem                *item;
126         DataItemSequence        *seq;
127
128         ret_val = 0;
129         log_debug("add_double_parameter() started\n");
130         seq     = (DataItemSequence *)_dataItemSeq;
131         if (name_param != NULL) {
132                 length          = seq->length();
133                 item            = new DataItem();
134                 item->name      = strdup(name_param);
135                 item->value     <<= (long)value_param;
136
137                 seq->length(length + 1);
138                 (*seq)[length]  = *item;
139         }
140         else {
141                 seq->length(0);
142                 ret_val = -1;
143         }
144         log_debug("add_double_parameter() done\n");
145         return ret_val;
146 }
147
148 int BusMessage::add_float_parameter(const char *name_param, float value_param)
149 {
150         long                    length;
151         int                     ret_val;
152         DataItem                *item;
153         DataItemSequence        *seq;
154
155         ret_val = 0;
156         seq     = (DataItemSequence *)_dataItemSeq;
157         if (name_param != NULL) {
158                 length          = seq->length();
159                 item            = new DataItem();
160                 item->name      = strdup(name_param);
161                 item->value     <<= (long)value_param;
162
163                 seq->length(length + 1);
164                 (*seq)[length]  = *item;
165         }
166         else {
167                 seq->length(0);
168                 ret_val = -1;
169         }
170         return ret_val;
171 }
172
173 void BusMessage::printout_dataitem(long index, void *item) {
174         CORBA::TCKind   kind;
175         DataItem        *dataitem;
176
177         dataitem        = (DataItem *)item;
178         if (item != NULL) {
179                 if (dataitem->name != NULL) {
180                         kind    = dataitem->value.type()->kind();
181                         switch(kind) {
182                                 case tk_string:
183                                         {
184                                                 const char *val;
185
186                                                 dataitem->value >>= val;
187                                                 log_debug("\t[%ld], value: %s\n", index, val);
188                                         }
189                                         break;
190                                 case tk_long:
191                                         {
192                                                 long    val;
193                                                 dataitem->value >>= val;
194                                                 log_debug("\t[%ld], value: %ld\n", index, val);
195                                                 //val_str       = strdup("long");
196                                         }
197                                         break;
198                                 case tk_double:
199                                         {
200                                                 double val;
201                                                 dataitem->value >>= val;
202                                                 log_debug("\t[%ld], value: %f\n", index, val);
203                                                 //val_str       = strdup("double");
204                                         }
205                                         break;
206                                 case tk_float:
207                                         {
208                                                 float val;
209                                                 dataitem->value >>= val;
210                                                 log_debug("\t[l%ld] value: %f\n", index, val);
211                                                 //val_str       = strdup("float");
212                                         }
213                                         break;
214                                 default:
215                                         log_error("\t[%ld], value unknown\n", index);
216                         }
217                 }
218                 else {
219                         log_error("\t[%ld] Invalid data item name name or value\n", index);
220                 }
221         }
222         else {
223                 log_error("\t[%ld] dataItem NULL.", index);
224         }
225 }
226
227 void BusMessage::printout() {
228         long int                count;
229         DataItem                item;
230         DataItemSequence        *seq;
231
232         seq     = (DataItemSequence *)_dataItemSeq;
233         count   = seq->length();
234         log_debug("BusMessage.printout(): parameter count: %ld\n", count);
235         for (long ii = 0; ii < count; ii++) {
236                 item    = (*seq)[ii];
237                 printout_dataitem(ii, &item);
238         }
239         log_debug("BusMessage.printout() done\n");;
240 }