SocketStatus NetworkManager::receive(sf::Packet& PacketToReceive)
{
    // initialize pendingPacket
    std::vector<char> myPendingPacket;    
    myPendingPacket.clear();
    // We start by getting the size of the incoming packet
    sf::Uint32      PacketSize = 0;
    std::size_t Received   = 0;
    
	PacketSize =receiveB<sf::Uint32>();	
	PacketSize = ntohl(PacketSize);

    // Then loop until we receive all the packet data
    char Buffer[1024];
    while (myPendingPacket.size() < PacketSize)
    {
        // Receive a chunk of data
        std::size_t SizeToGet = std::min(static_cast<std::size_t>(PacketSize - myPendingPacket.size()), sizeof(Buffer));
        SocketStatus Status = Receive(Buffer, SizeToGet, Received);
        if (Status != Done)
        {
			throw std::runtime_error("Network : receive packet : receive of information didn't worked");
        }

        // Append it into the packet
        if (Received > 0)
        {
            myPendingPacket.resize(myPendingPacket.size() + Received);
            char* Begin = &myPendingPacket[0] + myPendingPacket.size() - Received;
            memcpy(Begin, Buffer, Received);
        }
    }

    // We have received all the datas : we can copy it to the user packet, and clear our internal packet
    PacketToReceive.Clear();
    if (!myPendingPacket.empty())
        PacketToReceive.OnReceive(&myPendingPacket[0], myPendingPacket.size());

    return Done;
}