int actualizarBackup(char *key,struct data_t *data,int sinalizador) { int ok=1; if(sinalizador==1){ rtable_put(servidor, key, data); return ok; } if(sinalizador==2){ rtable_conditional_put(servidor, key, data); return ok; } if(sinalizador==0){ rtable_del(servidor, key); return ok; } ok = -1; return ok; }
int main(int argc, char**argv){ //verifica se tem no argumento o adress_port if(argc < 2) { perror("Poucos ou muitos argumentos"); return -1; } char ** outKeys; char *input = malloc(100 * sizeof(char)); struct data_t *inData, *outData; struct rtable_t *rtable; char *instruction; char *inKeyData; char *inKey; int numSpace,i; if((rtable = rtable_bind(argv[1])) == NULL) { perror("Erro ao conectar-se ao servidor"); return -1; } while(1){ printf("Enter an instruction: "); fgets(input, 100, stdin); //Numero de Espaços for(i=0,numSpace=0;input[i]!='\0';i++) if(input[i] == ' ') numSpace++; switch(numSpace) { case 0: instruction = strtok(input,"\n"); break; case 1: instruction = strtok(input," "); inKey = strtok(NULL,"\n"); break; case 2: instruction = strtok(input," "); inKey = strtok(NULL," "); inKeyData = strtok(NULL,"\n"); if(inKey != NULL && inKeyData != NULL) inData = data_create2(strlen(inKeyData),inKeyData); break; default: instruction = ""; break; } if(strcmp(instruction,"put") == 0 && numSpace == 2) { if(rtable_put(rtable,inKey,inData)==0) { printf("Operação executada com sucesso\n"); } else { printf("Operação executa com insucesso\n"); } data_destroy(inData); } else if(strcmp(instruction,"get") == 0 && numSpace == 1) { if(strcmp(inKey,"!") == 0) { outKeys = rtable_get_keys(rtable); if(outKeys != NULL) { printf("Operação executada com sucesso\n"); for(i = 0; outKeys[i] != NULL ; i++) { printf("A tabela remota tem a key: %s\n", outKeys[i]); } rtable_free_keys(outKeys); } else { printf("Operação executa com insucesso\n"); } } else { outData = rtable_get(rtable,inKey); if(outData != NULL) { printf("Operação executada com sucesso\n"); printf("Data recebida com tamanho %d\n",outData->datasize); data_destroy(outData); } else { printf("Operação executa com insucesso\n"); } } } else if(strcmp(instruction,"update" ) == 0 && numSpace == 2) { if(rtable_update(rtable,inKey,inData)==0) { printf("Operação executada com sucesso\n"); } else { printf("Operação executa com insucesso\n"); } data_destroy(inData); } else if(strcmp(instruction,"del") == 0 && numSpace == 1) { if(rtable_del(rtable,inKey)==0) { printf("Operação executada com sucesso\n"); } else { printf("Operação executa com insucesso\n"); } } else if(strcmp(instruction,"size") == 0 && numSpace == 0) { printf("Numero de elementos da tabela remota: %d\n",rtable_size(rtable)); } else if(strcmp(instruction,"quit") == 0 && numSpace == 0) { free(input); if(rtable_unbind(rtable)<0) { perror("rtable_unbind"); return -1; } printf("Adeus humano!\n"); return 0; } else { printf("Non-valid instruction\n"); } } }