bool check(float x, float z) { const uint32_t cellX = std::floor(x * 2.0f); const uint32_t cellZ = std::floor(z * 2.0f); return checkI(cellX, cellZ); }
//Recebe as tramas de dados e responde RR int transfDados(int fd, char* buffer, char* data, int filesize) { char dados[15000]; int res=0,i, a=0; int pointer=0; char nr,cns,cnr; nr=0x0; cns=0x0; cnr=0x5; int isValid = FALSE, next = FALSE; while(next!=TRUE) { isValid = checkI(buffer,cns); if(isValid==TRUE) { getData(buffer,data); if (data[0]==1) { printf("Recebida trama de controlo de dados (start)\n"); char fsize[data[2]]; while(a<data[2]) { fsize[a]=data[a+3]; a++; } filesize = atoi(fsize); a=0; while(a<=data[4+data[2]]) { filename[a]=data[4+data[2]+a]; //printf("%c",filename[a]); a++; } filename[a]='\0'; } else if(data[0]==0) { pointer = lerdados(data,dados,pointer); printf("A escrever dados na posicao %d de um total de %d\n",pointer,filesize); } else if(data[0]==2) { printf("Recebida trama de controlo de dados (end)\n"); /*if(filesize!=(data[3])) { printf("Dados corrompidos, tamanho do ficheiro nao e valido.%d\n",data[3]); exit(1); } if(filename!=data[6]) { printf("Dados corrompidos. Impossivel terminar.\n"); exit(1); }*/ } else { printf("Trama de dados corrompida.\n"); } //Verifica o valor do N(r) anterior para o poder alterar if(nr==0x1){ nr=0x0; cns=0x0; cnr=0x5; } else{ nr=0x1; cns=0x2; cnr=0x25; } writeRR(fd,cnr);//Escreve o RR de resposta que permite ao Sender identificar se enviou o I bem ou necessita de enviar outra vez } else { next = checkDISC(buffer); if(next==FALSE) { writeRR(fd,cnr); } else{ for(i=0; i<filesize; i++){ data[i] = dados[i]; } return filesize; } } llread(fd,buffer); } }