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

Revision 71, 5.7 KB (checked in by ahe, 16 years ago)

send xml from server to client through socket

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// main client socket
72int main(int argc, char *argv[])
73{
74    int sockfd, portno, n;
75    struct sockaddr_in serv_addr;
76    struct hostent *server;
77
78    // create a socket
79    char buffer[256];
80    char buffer1[256];
81    if (argc < 3) {
82       fprintf(stderr,"usage %s hostname port\n", argv[0]);
83       exit(0);
84    }
85    portno = atoi(argv[2]);
86    sockfd = socket(AF_INET, SOCK_STREAM, 0);
87    if (sockfd < 0)
88        error("ERROR opening socket");
89    server = gethostbyname(argv[1]);
90    if (server == NULL) {
91        fprintf(stderr,"ERROR, no such host\n");
92        exit(0);
93    }
94    bzero((char *) &serv_addr, sizeof(serv_addr));
95    serv_addr.sin_family = AF_INET;
96    bcopy((char *)server->h_addr,
97         (char *)&serv_addr.sin_addr.s_addr,
98         server->h_length);
99    serv_addr.sin_port = htons(portno);
100    // cast sockaddr_in to sockaddr
101    if (connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)) < 0)
102        error("ERROR connecting");
103   
104    int i, j;
105    Utility uList[10];
106    Parameter pList[10];
107    Observable oList[10];
108    CE_Info ce_info;
109
110    // read unitilities
111    // numUtilities
112    bzero(buffer,256);
113    ReadMessage(sockfd,buffer);
114    ce_info.numUtilities = atoi(buffer);
115    printf("number of utilities: %d\n", ce_info.numUtilities);
116       
117    for (i = 0; i < ce_info.numUtilities; i++){
118        bzero(buffer,256);
119            ReadMessage(sockfd,buffer);
120            printf("Name: %s\n", buffer);
121        strcpy(uList[i].name, buffer);
122                 
123        bzero(buffer,256);
124            ReadMessage(sockfd,buffer);
125            printf("Units: %s\n", buffer);
126        strcpy(uList[i].units, buffer);
127
128        bzero(buffer,256);
129            ReadMessage(sockfd,buffer);
130        printf("Goal: %s\n", buffer);
131        strcpy(uList[i].goal, buffer);
132       
133            bzero(buffer,256);
134            ReadMessage(sockfd,buffer);
135        printf("Target: %s\n", buffer);
136        uList[i].target = atof(buffer);
137    }
138
139    // read parameters
140    // numParameters
141    bzero(buffer,256);
142    ReadMessage(sockfd,buffer);
143    ce_info.numParameters = atoi(buffer);
144    printf("number of parameters: %d\n", ce_info.numParameters);
145       
146    for (i = 0; i < ce_info.numParameters; i++){
147        bzero(buffer,256);
148            ReadMessage(sockfd,buffer);
149            printf("Name: %s\n", buffer);
150        strcpy(pList[i].name, buffer);
151                 
152        bzero(buffer,256);
153            ReadMessage(sockfd,buffer);
154            printf("Units: %s\n", buffer);
155        strcpy(pList[i].units, buffer);
156
157        bzero(buffer,256);
158            ReadMessage(sockfd,buffer);
159        printf("Min: %s\n", buffer);
160        pList[i].min = atof(buffer);
161       
162        bzero(buffer,256);
163            ReadMessage(sockfd,buffer);
164        printf("Max: %s\n", buffer);
165        pList[i].max = atof(buffer);
166       
167            bzero(buffer,256);
168            ReadMessage(sockfd,buffer);
169        printf("Step: %s\n", buffer);
170        pList[i].step = atof(buffer);
171   
172        // numAffects
173        bzero(buffer,256);
174        ReadMessage(sockfd,buffer);
175        pList[i].numAffects = atoi(buffer);
176        printf("number of affects: %d\n", pList[i].numAffects);
177       
178        for (j = 0; j < pList[i].numAffects; j++){
179            bzero(buffer,256);
180                ReadMessage(sockfd,buffer);
181                printf("Utility name: %s\n", buffer);
182            strcpy(pList[i].affection_list[j].u.name, buffer);
183                 
184            bzero(buffer,256);
185                ReadMessage(sockfd,buffer);
186                printf("Relation: %s\n", buffer);
187            strcpy(pList[i].affection_list[j].relation, buffer);
188        }
189
190    }
191   
192    // read obervables
193    // numParameters
194    bzero(buffer,256);
195    ReadMessage(sockfd,buffer);
196    ce_info.numObservables = atoi(buffer);
197    printf("number of observables: %d\n", ce_info.numObservables);
198       
199    for (i = 0; i < ce_info.numObservables; i++){
200        bzero(buffer,256);
201            ReadMessage(sockfd,buffer);
202            printf("Name: %s\n", buffer);
203        strcpy(pList[i].name, buffer);
204                 
205        // numAffects
206        bzero(buffer,256);
207        ReadMessage(sockfd,buffer);
208        oList[i].numAffects = atoi(buffer);
209        printf("number of affects: %d\n", oList[i].numAffects);
210       
211        for (j = 0; j < oList[i].numAffects; j++){
212            bzero(buffer,256);
213                ReadMessage(sockfd,buffer);
214                printf("Utility name: %s\n", buffer);
215            strcpy(oList[i].affection_list[j].u.name, buffer);
216                 
217            bzero(buffer,256);
218                ReadMessage(sockfd,buffer);
219                printf("Relation: %s\n", buffer);
220            strcpy(oList[i].affection_list[j].relation, buffer);
221        }
222    }
223
224   
225    printf("xml transmission done\n");
226
227
228  return 0;
229}
Note: See TracBrowser for help on using the browser.