예제 #1
0
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;
}
예제 #2
0
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");
		}
	}
}