root/vtcross/branches/trnewman/CR_shell/src/main_cognitive_engine.cpp @ 141

Revision 75, 8.1 KB (checked in by ahe, 16 years ago)

remove test printout

Line 
1#include <stdio.h>
2#include <sys/types.h>
3#include <sys/socket.h>
4#include <netinet/in.h>
5#include <netdb.h>
6#include <iostream>
7
8using namespace std;
9
10struct CE_Info {
11    int numUtilities;
12    int numParameters;
13    int numObservables;
14};
15
16struct Utility {
17    char name[50];
18    char units[50];
19    char goal[50];
20   /* string name;
21    string units;
22    string goal;*/
23    float target;
24};
25
26struct Affect {
27    Utility u;
28    //string relation;
29    char relation[50];
30};     
31
32struct Parameter {
33    /*string name;
34    string units;*/
35    char name[50];
36    char units[50];
37    float min;
38    int numAffects;
39    Affect affection_list[10];
40    float max;
41    float step;
42};     
43       
44struct Observable {
45    //string name;
46    char name[50];
47    Affect affection_list[10];
48    int numAffects;
49};
50
51// error handling
52void error(char *msg)
53{
54    perror(msg);
55    exit(0);
56}
57
58void ReadMessage(int socket,char * buffer) {
59    int i,n;
60
61    n = recv(socket,buffer,256,MSG_PEEK);
62    for(i=0;i<256;i++){
63            if(strcmp(&buffer[i],"\0") == 0) break;
64    }
65    n = recv(socket,buffer,i+1,0);
66    if (n < 0)
67         error("ERROR reading from socket");
68//    printf("ReadMessage:%s %d\n",buffer,n);
69}
70
71
72int GetUtility(int sockfd, Utility uList[], CE_Info *ce_info)
73{
74    char buffer[256];
75    int i;
76
77    // read unitilities
78    // numUtilities
79    bzero(buffer,256);
80    ReadMessage(sockfd,buffer);
81    ce_info->numUtilities = atoi(buffer);
82    //printf("number of utilities: %d\n", ce_info->numUtilities);
83       
84    for (i = 0; i < ce_info->numUtilities; i++){
85        bzero(buffer,256);
86            ReadMessage(sockfd,buffer);
87            //printf("Name: %s\n", buffer);
88        strcpy(uList[i].name, buffer);
89                 
90        bzero(buffer,256);
91            ReadMessage(sockfd,buffer);
92            //printf("Units: %s\n", buffer);
93        strcpy(uList[i].units, buffer);
94
95        bzero(buffer,256);
96            ReadMessage(sockfd,buffer);
97        //printf("Goal: %s\n", buffer);
98        strcpy(uList[i].goal, buffer);
99       
100            bzero(buffer,256);
101            ReadMessage(sockfd,buffer);
102        //printf("Target: %s\n", buffer);
103        uList[i].target = atof(buffer);
104    }
105    return 1;
106}
107
108
109int GetParameter(int sockfd, Parameter pList[], CE_Info *ce_info)
110{
111    char buffer[256];
112    int i, j;
113
114    // numParameters
115    bzero(buffer,256);
116    ReadMessage(sockfd,buffer);
117    ce_info->numParameters = atoi(buffer);
118    //printf("number of parameters: %d\n", ce_info->numParameters);
119       
120    for (i = 0; i < ce_info->numParameters; i++){
121        bzero(buffer,256);
122            ReadMessage(sockfd,buffer);
123            //printf("Name: %s\n", buffer);
124        strcpy(pList[i].name, buffer);
125                 
126        bzero(buffer,256);
127            ReadMessage(sockfd,buffer);
128            //printf("Units: %s\n", buffer);
129        strcpy(pList[i].units, buffer);
130
131        bzero(buffer,256);
132            ReadMessage(sockfd,buffer);
133        //printf("Min: %s\n", buffer);
134        pList[i].min = atof(buffer);
135       
136        bzero(buffer,256);
137            ReadMessage(sockfd,buffer);
138        //printf("Max: %s\n", buffer);
139        pList[i].max = atof(buffer);
140       
141            bzero(buffer,256);
142            ReadMessage(sockfd,buffer);
143        //printf("Step: %s\n", buffer);
144        pList[i].step = atof(buffer);
145   
146        // numAffects
147        bzero(buffer,256);
148        ReadMessage(sockfd,buffer);
149        pList[i].numAffects = atoi(buffer);
150        //printf("number of affects: %d\n", pList[i].numAffects);
151       
152        for (j = 0; j < pList[i].numAffects; j++){
153            bzero(buffer,256);
154                ReadMessage(sockfd,buffer);
155                //printf("Utility name: %s\n", buffer);
156            strcpy(pList[i].affection_list[j].u.name, buffer);
157                 
158            bzero(buffer,256);
159                ReadMessage(sockfd,buffer);
160                //printf("Relation: %s\n", buffer);
161            strcpy(pList[i].affection_list[j].relation, buffer);
162        }
163    }
164    return 1;
165}
166
167
168int GetObservable(int sockfd, Observable oList[], CE_Info *ce_info)
169{
170    char buffer[256];
171    int i,j;
172
173    // numParameters
174    bzero(buffer,256);
175    ReadMessage(sockfd,buffer);
176    ce_info->numObservables = atoi(buffer);
177    //printf("number of observables: %d\n", ce_info->numObservables);
178       
179    for (i = 0; i < ce_info->numObservables; i++){
180        bzero(buffer,256);
181            ReadMessage(sockfd,buffer);
182            //printf("Name: %s\n", buffer);
183        strcpy(oList[i].name, buffer);
184                 
185        // numAffects
186        bzero(buffer,256);
187        ReadMessage(sockfd,buffer);
188        oList[i].numAffects = atoi(buffer);
189        //printf("number of affects: %d\n", oList[i].numAffects);
190       
191        for (j = 0; j < oList[i].numAffects; j++){
192            bzero(buffer,256);
193                ReadMessage(sockfd,buffer);
194                //printf("Utility name: %s\n", buffer);
195            strcpy(oList[i].affection_list[j].u.name, buffer);
196                 
197            bzero(buffer,256);
198                ReadMessage(sockfd,buffer);
199                //printf("Relation: %s\n", buffer);
200            strcpy(oList[i].affection_list[j].relation, buffer);
201        }
202    }
203    return 1;
204}
205
206
207int GetXMLFromServer(int sockfd, Utility uList[], Parameter pList[],
208        Observable oList[], CE_Info *ce_info)
209{
210    // get utilities
211    GetUtility(sockfd, uList, ce_info);
212   
213    // get parameters
214    GetParameter(sockfd, pList, ce_info);
215
216    // read obervables
217    GetObservable(sockfd, oList, ce_info);
218
219    printf("xml reception done\n");
220   
221    return 1;
222}
223
224void print_current_config(Utility uList[], Parameter pList[],
225        Observable oList[], CE_Info * ce_info)
226{   
227    int i = 0;
228    int j = 0;
229
230    // utilities
231    for(i = 0; i < ce_info->numUtilities ; i++) {
232        cout << "Utility:  " << uList[i].name << endl;
233        cout << "     Units:  " << uList[i].units << endl;
234        cout << "     Goal:   " << uList[i].goal << endl;
235        cout << "     Target: " << uList[i].target << endl;
236    }
237                       
238    // parameters                       
239    for(i = 0; i < ce_info->numParameters; i++) {
240        cout << "Parameter:  " << pList[i].name << endl;
241        cout << "       Units:   " << pList[i].units << endl;
242        cout << "       Min:     " << pList[i].min << endl;
243        cout << "       Max:     " << pList[i].max << endl;
244        cout << "       Step:    " << pList[i].step << endl;
245        for(j = 0; j < pList[i].numAffects; j++) {
246            cout << "       Affect: " << pList[i].affection_list[j].u.name << " -> " << pList[i].affection_list[j].relation << endl;
247        }
248    }
249
250    // observables
251    for(i = 0; i < ce_info->numObservables; i++) {
252        cout << "Observable:  " << oList[i].name << endl;
253        for(j = 0; j < oList[i].numAffects; j++) {
254            cout << "       Affect: " << oList[i].affection_list[j].u.name << " -> " << oList[i].affection_list[j].relation << endl;
255        }
256    }
257}
258
259
260// main client socket
261int main(int argc, char *argv[])
262{
263    Utility uList[10];
264    Parameter pList[10];
265    Observable oList[10];
266    CE_Info ce_info;
267
268    int sockfd, portno;
269    struct sockaddr_in serv_addr;
270    struct hostent *server;
271
272    // setup client socket connection
273    if (argc < 3) {
274       fprintf(stderr,"usage: %s hostname port\n", argv[0]);
275       exit(0);
276    }
277    // server name
278    server = gethostbyname(argv[1]);
279    if (server == NULL) {
280        fprintf(stderr,"ERROR, no such host\n");
281        exit(0);
282    }
283    // port no.
284    portno = atoi(argv[2]);
285    // socket file descriptor
286    sockfd = socket(AF_INET, SOCK_STREAM, 0);
287    if (sockfd < 0)
288        error("ERROR opening socket");
289    // initiate struct socketaddr_in
290    bzero((char *) &serv_addr, sizeof(serv_addr));
291    serv_addr.sin_family = AF_INET;
292    serv_addr.sin_port = htons(portno);
293    bcopy((char *)server->h_addr,
294         (char *)&serv_addr.sin_addr.s_addr,
295         server->h_length);
296    // cast sockaddr_in to sockaddr
297    if (connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)) < 0)
298        error("ERROR connecting");
299   
300    // get xml info from server
301    GetXMLFromServer(sockfd, uList, pList, oList, &ce_info);
302
303    //printf("utility:\n name: %s, units: %s, goal: %s, target: %f\n",
304    //        uList[0].name, uList[0].units, uList[0].goal, uList[0].target);
305   
306    print_current_config(uList, pList, oList, &ce_info);
307
308
309  return 0;
310}
Note: See TracBrowser for help on using the browser.