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

Revision 70, 3.2 KB (checked in by trnewman, 16 years ago)

Fixed send and recv problems whrn trying to send multiple consecutive msgs. PEEEK

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[20];
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;
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    //for (i = 0; i < ce_info->numUtilities; i++){
140    /*for (i = 0; i < 1; i++){
141        printf("%s ", uList[i]);
142    }*/
143    printf("\n");
144
145
146    return 0;
147}
Note: See TracBrowser for help on using the browser.