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

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

remove test printout

RevLine 
[67]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 {
[69]17    char name[50];
18    char units[50];
19    char goal[50];
[67]20   /* string name;
21    string units;
22    string goal;*/
23    float target;
24};
25
26struct Affect {
[71]27    Utility u;
[67]28    //string relation;
[71]29    char relation[50];
[67]30};     
31
32struct Parameter {
33    /*string name;
34    string units;*/
[69]35    char name[50];
36    char units[50];
[67]37    float min;
38    int numAffects;
39    Affect affection_list[10];
40    float max;
41    float step;
42};     
43       
44struct Observable {
45    //string name;
[69]46    char name[50];
[67]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
[70]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++){
[71]63            if(strcmp(&buffer[i],"\0") == 0) break;
[70]64    }
65    n = recv(socket,buffer,i+1,0);
66    if (n < 0)
67         error("ERROR reading from socket");
[71]68//    printf("ReadMessage:%s %d\n",buffer,n);
[70]69}
70
[74]71
72int GetUtility(int sockfd, Utility uList[], CE_Info *ce_info)
[67]73{
74    char buffer[256];
[74]75    int i;
[67]76
77    // read unitilities
78    // numUtilities
79    bzero(buffer,256);
[70]80    ReadMessage(sockfd,buffer);
[73]81    ce_info->numUtilities = atoi(buffer);
[75]82    //printf("number of utilities: %d\n", ce_info->numUtilities);
[67]83       
[73]84    for (i = 0; i < ce_info->numUtilities; i++){
[67]85        bzero(buffer,256);
[71]86            ReadMessage(sockfd,buffer);
[75]87            //printf("Name: %s\n", buffer);
[70]88        strcpy(uList[i].name, buffer);
[68]89                 
90        bzero(buffer,256);
[71]91            ReadMessage(sockfd,buffer);
[75]92            //printf("Units: %s\n", buffer);
[70]93        strcpy(uList[i].units, buffer);
[68]94
[70]95        bzero(buffer,256);
[71]96            ReadMessage(sockfd,buffer);
[75]97        //printf("Goal: %s\n", buffer);
[70]98        strcpy(uList[i].goal, buffer);
[68]99       
[71]100            bzero(buffer,256);
101            ReadMessage(sockfd,buffer);
[75]102        //printf("Target: %s\n", buffer);
[70]103        uList[i].target = atof(buffer);
[67]104    }
[74]105    return 1;
106}
[67]107
[74]108
109int GetParameter(int sockfd, Parameter pList[], CE_Info *ce_info)
110{
111    char buffer[256];
112    int i, j;
113
[71]114    // numParameters
115    bzero(buffer,256);
116    ReadMessage(sockfd,buffer);
[73]117    ce_info->numParameters = atoi(buffer);
[75]118    //printf("number of parameters: %d\n", ce_info->numParameters);
[71]119       
[73]120    for (i = 0; i < ce_info->numParameters; i++){
[71]121        bzero(buffer,256);
122            ReadMessage(sockfd,buffer);
[75]123            //printf("Name: %s\n", buffer);
[71]124        strcpy(pList[i].name, buffer);
125                 
126        bzero(buffer,256);
127            ReadMessage(sockfd,buffer);
[75]128            //printf("Units: %s\n", buffer);
[71]129        strcpy(pList[i].units, buffer);
[67]130
[71]131        bzero(buffer,256);
132            ReadMessage(sockfd,buffer);
[75]133        //printf("Min: %s\n", buffer);
[71]134        pList[i].min = atof(buffer);
135       
136        bzero(buffer,256);
137            ReadMessage(sockfd,buffer);
[75]138        //printf("Max: %s\n", buffer);
[71]139        pList[i].max = atof(buffer);
140       
141            bzero(buffer,256);
142            ReadMessage(sockfd,buffer);
[75]143        //printf("Step: %s\n", buffer);
[71]144        pList[i].step = atof(buffer);
145   
146        // numAffects
147        bzero(buffer,256);
148        ReadMessage(sockfd,buffer);
149        pList[i].numAffects = atoi(buffer);
[75]150        //printf("number of affects: %d\n", pList[i].numAffects);
[71]151       
152        for (j = 0; j < pList[i].numAffects; j++){
153            bzero(buffer,256);
154                ReadMessage(sockfd,buffer);
[75]155                //printf("Utility name: %s\n", buffer);
[71]156            strcpy(pList[i].affection_list[j].u.name, buffer);
157                 
158            bzero(buffer,256);
159                ReadMessage(sockfd,buffer);
[75]160                //printf("Relation: %s\n", buffer);
[71]161            strcpy(pList[i].affection_list[j].relation, buffer);
162        }
[74]163    }
164    return 1;
165}
[67]166
[74]167
168int GetObservable(int sockfd, Observable oList[], CE_Info *ce_info)
169{
170    char buffer[256];
171    int i,j;
172
[71]173    // numParameters
174    bzero(buffer,256);
175    ReadMessage(sockfd,buffer);
[73]176    ce_info->numObservables = atoi(buffer);
[75]177    //printf("number of observables: %d\n", ce_info->numObservables);
[71]178       
[73]179    for (i = 0; i < ce_info->numObservables; i++){
[71]180        bzero(buffer,256);
181            ReadMessage(sockfd,buffer);
[75]182            //printf("Name: %s\n", buffer);
[74]183        strcpy(oList[i].name, buffer);
[71]184                 
185        // numAffects
186        bzero(buffer,256);
187        ReadMessage(sockfd,buffer);
188        oList[i].numAffects = atoi(buffer);
[75]189        //printf("number of affects: %d\n", oList[i].numAffects);
[71]190       
191        for (j = 0; j < oList[i].numAffects; j++){
192            bzero(buffer,256);
193                ReadMessage(sockfd,buffer);
[75]194                //printf("Utility name: %s\n", buffer);
[71]195            strcpy(oList[i].affection_list[j].u.name, buffer);
196                 
197            bzero(buffer,256);
198                ReadMessage(sockfd,buffer);
[75]199                //printf("Relation: %s\n", buffer);
[71]200            strcpy(oList[i].affection_list[j].relation, buffer);
201        }
202    }
[74]203    return 1;
204}
[71]205
[74]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
[73]219    printf("xml reception done\n");
[71]220   
[74]221    return 1;
[73]222}
[71]223
[75]224void print_current_config(Utility uList[], Parameter pList[],
225        Observable oList[], CE_Info * ce_info)
[73]226{   
227    int i = 0;
228    int j = 0;
[71]229
[73]230    // utilities
231    for(i = 0; i < ce_info->numUtilities ; i++) {
[75]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;
[73]236    }
237                       
238    // parameters                       
239    for(i = 0; i < ce_info->numParameters; i++) {
[75]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;
[73]247        }
248    }
249
250    // observables
251    for(i = 0; i < ce_info->numObservables; i++) {
[75]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;
[73]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
[75]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);
[73]305   
[75]306    print_current_config(uList, pList, oList, &ce_info);
[73]307
308
[71]309  return 0;
[67]310}
Note: See TracBrowser for help on using the browser.