Changeset 79 for vtcross/branches

Show
Ignore:
Timestamp:
11/24/08 16:25:40 (16 years ago)
Author:
ahe
Message:

client send results to server

Location:
vtcross/branches/trnewman/CR_engines/CBR/src
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • vtcross/branches/trnewman/CR_engines/CBR/src/cbr.c

    r77 r79  
    2424    //sqlite3 **db; 
    2525 
    26     printf("database name: %s\n", _cbr->filename); 
     26    //printf("database name: %s\n", _cbr->filename); 
    2727    //rc = sqlite3_open(_cbr->filename, db); 
    2828    rc = sqlite3_open(_cbr->filename, &(_cbr->db)); 
     
    3333        exit(1); 
    3434    } else{ 
    35         printf("database opened.\n"); 
     35        //printf("database opened.\n"); 
    3636    } 
    3737    //_cbr->db = *db; 
     
    220220    } 
    221221 
    222     printf("search command: %s\n", _cbr->command); 
     222    //printf("search command: %s\n", _cbr->command); 
    223223 
    224224    //ExecuteCommand(_cbr); 
  • vtcross/branches/trnewman/CR_engines/CBR/src/main_cognitive_engine.c

    r77 r79  
    2626    string goal;*/ 
    2727    float target; 
     28    float value; 
    2829}; 
    2930 
     
    4445    float max; 
    4546    float step; 
     47    float value; 
    4648};       
    4749         
     
    5153    struct Affect affection_list[10]; 
    5254    int numAffects; 
     55    float value; 
    5356}; 
    5457 
     
    209212 
    210213 
     214// setup client socket connection 
     215int ClientSocket(int argc, char** argv) 
     216{ 
     217    int sockfd; 
     218    int portno; 
     219    struct sockaddr_in serv_addr; 
     220    struct hostent *server; 
     221     
     222    // setup client socket connection 
     223    if (argc < 3) { 
     224       fprintf(stderr,"usage: %s hostname port\n", argv[0]); 
     225       exit(0); 
     226    } 
     227    // server name 
     228    server = gethostbyname(argv[1]); 
     229    if (server == NULL) { 
     230        fprintf(stderr,"ERROR, no such host\n"); 
     231        exit(0); 
     232    } 
     233    // port no. 
     234    portno = atoi(argv[2]); 
     235    // socket file descriptor 
     236    sockfd = socket(AF_INET, SOCK_STREAM, 0); 
     237    if (sockfd < 0)  
     238        error("ERROR opening socket"); 
     239    // initiate struct socketaddr_in 
     240    bzero((char *) &serv_addr, sizeof(serv_addr)); 
     241    serv_addr.sin_family = AF_INET; 
     242    serv_addr.sin_port = htons(portno); 
     243    bcopy((char *)server->h_addr,  
     244         (char *)&serv_addr.sin_addr.s_addr, 
     245         server->h_length); 
     246    // cast sockaddr_in to sockaddr 
     247    if (connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)) < 0)  
     248        error("ERROR connecting"); 
     249 
     250    return sockfd; 
     251} 
     252 
     253     
    211254int GetXMLFromServer(int sockfd, struct Utility uList[], struct Parameter pList[],  
    212255        struct Observable oList[], struct CE_Info *ce_info) 
     
    226269} 
    227270 
    228 void print_current_config(struct Utility uList[], struct Parameter pList[],  
    229         struct Observable oList[], struct CE_Info * ce_info)  
     271 
     272int SendMessage(int socketfd, char *message)  
     273{ 
     274    int n; 
     275      
     276    strcat(message, "\0000"); 
     277    // Write message back to client 
     278    //n = write(socketfd,message,(strlen(message)+1)); 
     279    n = send(socketfd,message,(strlen(message)+1),0); 
     280    if (n<0) 
     281        error("Error sending to server\n"); 
     282    else if(n == 0) 
     283        printf("Server closed the socket.\n"); 
     284     
     285    return n; 
     286} 
     287 
     288 
     289void print_current_config(struct Utility uList[],  
     290        struct Parameter pList[],  
     291        struct Observable oList[],  
     292        struct CE_Info * ce_info)  
    230293{     
    231294    int i = 0; 
     
    273336} 
    274337 
    275  
    276 // main client socket 
    277 int main(int argc, char *argv[]) 
    278 { 
    279     struct Utility uList[10]; 
    280     struct Parameter pList[10]; 
    281     struct Observable oList[10]; 
    282     struct CE_Info ce_info; 
    283  
    284     int sockfd, portno; 
    285     struct sockaddr_in serv_addr; 
    286     struct hostent *server; 
    287  
    288     // setup client socket connection 
    289     if (argc < 3) { 
    290        fprintf(stderr,"usage: %s hostname port\n", argv[0]); 
    291        exit(0); 
    292     } 
    293     // server name 
    294     server = gethostbyname(argv[1]); 
    295     if (server == NULL) { 
    296         fprintf(stderr,"ERROR, no such host\n"); 
    297         exit(0); 
    298     } 
    299     // port no. 
    300     portno = atoi(argv[2]); 
    301     // socket file descriptor 
    302     sockfd = socket(AF_INET, SOCK_STREAM, 0); 
    303     if (sockfd < 0)  
    304         error("ERROR opening socket"); 
    305     // initiate struct socketaddr_in 
    306     bzero((char *) &serv_addr, sizeof(serv_addr)); 
    307     serv_addr.sin_family = AF_INET; 
    308     serv_addr.sin_port = htons(portno); 
    309     bcopy((char *)server->h_addr,  
    310          (char *)&serv_addr.sin_addr.s_addr, 
    311          server->h_length); 
    312     // cast sockaddr_in to sockaddr 
    313     if (connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)) < 0)  
    314         error("ERROR connecting"); 
    315      
    316     // get xml info from server 
    317     GetXMLFromServer(sockfd, uList, pList, oList, &ce_info); 
    318  
    319     //printf("utility:\n name: %s, units: %s, goal: %s, target: %f\n",  
    320     //        uList[0].name, uList[0].units, uList[0].goal, uList[0].target); 
    321      
    322     print_current_config(uList, pList, oList, &ce_info);  
    323  
    324     // cbr operation 
     338int RunCBREngine(struct Utility uList[], struct Parameter pList[], 
     339        struct Observable oList[], struct CE_Info *ce_info,  
     340        int num_cols) 
     341{ 
     342     
    325343    int i; 
    326     unsigned int num_cols; 
    327  
    328     num_cols = ce_info.numUtilities + ce_info.numParameters; 
    329     num_cols = num_cols + ce_info.numObservables; 
    330     num_cols = num_cols + 1; 
    331  
    332     char *cols[] = {"throughput", "spectral_efficiency", 
    333         "log10_ber", "mod_scheme", "tx_power", "SNR", "utility"}; 
    334      
     344 
     345    // get column names 
     346    //char *cols[50]; 
     347    char **cols; 
     348    cols = (char **)malloc(sizeof(char)*num_cols); 
     349    int j = 0; 
     350    for (i = 0; i < ce_info->numUtilities; i++){ 
     351        cols[j] = malloc(strlen(uList[i].name)+1); 
     352        cols[j] = uList[i].name; 
     353        j++; 
     354    } 
     355    for (i = 0; i < ce_info->numParameters; i++){ 
     356        cols[j] = malloc(strlen(pList[i].name)+1); 
     357        cols[j] = pList[i].name; 
     358        j++; 
     359    } 
     360    for (i = 0; i < ce_info->numObservables; i++){ 
     361        cols[j] = malloc(strlen(oList[i].name)+1); 
     362        cols[j] = oList[i].name; 
     363        j++; 
     364    } 
     365    cols[j] = malloc(strlen("utility")+1); 
     366    cols[j] = "utility"; 
     367     
     368    // sample table entry 
    335369    float vals[num_cols]; 
    336370    vals[0] = 10e3f;    // throughput 
     
    342376    vals[6] = 0.762;    // utility 
    343377     
    344     /*num_cols = 6; 
    345     char * cols[] = { 
    346         "BER", "throughput", 
    347         "mod_scheme", "tx_power", 
    348         "noise_power", "path_loss" 
    349     }; 
    350  
    351     float vals[num_cols]; 
    352     vals[0] = 1e-3f;    // BER 
    353     vals[1] = 10e3f;    // throughput 
    354     vals[2] = 1;        // mod_scheme 
    355     vals[3] = -3.0f;    // tx_power 
    356     vals[4] = -50.0f;   // noise_power 
    357     vals[5] = 125.0f;   // path_loss 
    358     //vals[6] = 0.762;    // utility*/ 
    359      
    360378    printf("number of columns: %d\n", num_cols); 
    361379    printf("column names:"); 
     
    368386 
    369387    // create cbr database/table 
    370     printf("create cbr database\n"); 
     388    //printf("create cbr database\n"); 
    371389    char filename[] = {"ex1"}, tablename[] = {"data"}; 
    372390    cbr mycbr = cbr_create(filename, tablename, cols, num_cols); 
     
    374392     
    375393    // add row here 
    376     printf("add row to cbr table\n"); 
     394    //printf("add row to cbr table\n"); 
    377395    rc = cbr_add_row(mycbr, cols, vals, num_cols); 
    378396     
     
    380398    printf("cbr table\n"); 
    381399    cbr_print(mycbr); 
    382      
    383     /*// simple search: find entry where... 
    384     //   BER < 1e-2 and path_loss > 100 
    385     char * search_names[] = {"BER", "path_loss"}; 
    386     int search_ops[] = {LT, GT}; 
    387     float search_vals[] = {1e-2f, 100.f}; 
    388     float retvals[num_cols]; 
    389     printf("search cbr\n"); 
    390     rc = cbr_search(mycbr, search_names, search_ops, search_vals, 2,retvals);*/ 
    391400     
    392401    // simple search: find entry where... 
     
    399408            search_vals, 2, retvals); 
    400409 
    401     // print returned values 
     410    j = 0; 
     411    for (i = 0; i < ce_info->numUtilities; i++){ 
     412        uList[i].value = retvals[j]; 
     413        j++; 
     414    } 
     415    for (i = 0; i < ce_info->numParameters; i++){ 
     416        pList[i].value = retvals[j]; 
     417        j++; 
     418    } 
     419    for (i = 0; i < ce_info->numObservables; i++){ 
     420        oList[i].value = retvals[j]; 
     421        j++; 
     422    } 
     423 
     424    // clean up database 
     425    //printf("clean cbr database\n"); 
     426    cbr_free(mycbr); 
     427     
     428    return 1; 
     429} 
     430 
     431// main client socket 
     432int main(int argc, char *argv[]) 
     433{ 
     434    struct Utility uList[10]; 
     435    struct Parameter pList[10]; 
     436    struct Observable oList[10]; 
     437    struct CE_Info ce_info; 
     438 
     439    // setup client socket connection 
     440    int sockfd; 
     441    sockfd = ClientSocket(argc, argv); 
     442     
     443    // get xml info from server 
     444    GetXMLFromServer(sockfd, uList, pList, oList, &ce_info); 
     445    print_current_config(uList, pList, oList, &ce_info);  
     446 
     447    // cbr operation 
     448    unsigned int num_cols; 
     449    // get number of columns 
     450    num_cols = ce_info.numUtilities + ce_info.numParameters; 
     451    num_cols = num_cols + ce_info.numObservables; 
     452    num_cols = num_cols + 1; 
     453    RunCBREngine(uList, pList, oList, &ce_info, num_cols);     
     454    // print out results 
     455    int i; 
    402456    printf("search result: "); 
    403     for (i=0;i<num_cols; i++) 
    404     //for (i=0;i<mycbr->num_columns; i++) 
    405     printf("%f, ",retvals[i]); 
     457    for (i=0;i<ce_info.numUtilities; i++) 
     458        printf("%f, ",uList[i].value); 
     459    for (i=0;i<ce_info.numParameters; i++) 
     460        printf("%f, ",pList[i].value); 
     461    for (i=0;i<ce_info.numObservables; i++) 
     462        printf("%f, ",oList[i].value); 
    406463    printf("\n"); 
    407464     
    408     // clean up database 
    409     printf("clean cbr database\n"); 
    410     cbr_free(mycbr); 
    411      
    412     printf("done at client.\n"); 
    413     return 0; 
    414      
     465    // send results back to server 
     466    char counter[50]; 
     467    char var[50]; 
     468    // utility 
     469    sprintf(counter, "%d", ce_info.numUtilities); 
     470    SendMessage(sockfd, counter); 
     471    // send utilities 
     472    for (i = 0; i < ce_info.numUtilities; i++){ 
     473        sprintf(var, "%f", uList[i].value); 
     474        SendMessage(sockfd, var); 
     475    } 
     476 
     477    // parameter 
     478    sprintf(counter, "%d", ce_info.numParameters); 
     479    SendMessage(sockfd, counter); 
     480    // send parameters 
     481    for (i = 0; i < ce_info.numParameters; i++){ 
     482        sprintf(var, "%f", pList[i].value); 
     483        SendMessage(sockfd, var); 
     484    } 
     485 
     486    // observable 
     487    sprintf(counter, "%d", ce_info.numObservables); 
     488    SendMessage(sockfd, counter); 
     489    // send utilities 
     490    for (i = 0; i < ce_info.numObservables; i++){ 
     491        sprintf(var, "%f", oList[i].value); 
     492        SendMessage(sockfd, var); 
     493    } 
     494 
    415495 
    416496  return 0;