void DescriptionBuffer::copiarLectura(void *elemento, long posicion) { Description *elem = (Description *) elemento; Description *dato = _datos[posicion]; char* buffer = elem->getBuffer(); dato->getBufferCopied(&buffer); elem->setBuffer(buffer,dato->getSize());//It is only for updating the _usedSize of the buffer elem->setId(dato->getId()); return; #ifdef _DEBUG //printf("DescriptionBuffer::copiarLectura: imagen %d ; posicion %d\n",im->getId(),posicion); #endif }
int DiVAClient::WaitForDescription(void** buffer) { long longitud =0; char aux[512]; memset(aux,0,512); //Espero la recepción de los parametros //Primero su longitud longitud = 0; long x1 = 0; long x = 0; long porRecibir =sizeof(long); long longTotal=0; x1 = DiVArecv(aux ,porRecibir); if(x1<0) return -1; memcpy(&longitud,aux,sizeof(long)); longTotal=longTotal+x1; //Despues los parametros en si porRecibir =longitud; long x2= DiVArecv(aux ,porRecibir); if(x2<0) return -1; x=0; longTotal=longTotal+x2; long id; long bufferSize; sscanf(aux,"%d %d\n",&id,&bufferSize); //No sin antes almacenar el buffer de la imagen en ella //Primero recibimos la longitud del buffer porRecibir =sizeof(long); long x3 = DiVArecv(aux ,porRecibir); if(x3<=0) { return -1; } x=0; longTotal=longTotal+x3; memcpy(&longitud,aux,sizeof(long)); //Creo la instancia que devolveremos Description* pdesc = new Description(bufferSize);/////////////////////////////////////////////////////// pdesc->setId(id); //Despues el buffer en si char * dataBuffer = (char*)pdesc->getBuffer(); porRecibir =longitud; long x4 = DiVArecv(dataBuffer ,porRecibir); if(x4<=0) { if(pdesc) delete pdesc; return -1; } x=0; *buffer = (void*)pdesc; longTotal=longTotal+x4; return longTotal; }