#ifndef NETWORK_CLIENT_HPP
#define NETWORK_CLIENT_HPP

// Détection du système cible...
#include "usgeDetectSystem.h"

#ifdef TARGET_SYSTEM_PSP
    #define SOCKET int
#elif defined TARGET_SYSTEM_WIN32
    #include <winsock.h>
#endif

// C++
#include <string>

// Personnelles
#include "Network/Network.hpp"


namespace USpeedGameEngine
{

class Network::Client
{
    /* **************
    * Les attributs *
    * **************/
    public :
    protected :
    private :
        SOCKET clientSocket;            //!< Socket du serveur

    /* *************
    * Les méthodes *
    * *************/
    public :
        // Constructeur par défaut
        Client();
        // Destructeur par défaut
        ~Client();

        // Récupération du contenu de l'URL spécifiée en HTTP.
        static void httpContent(std::string const &url, std::string &response, std::string const &header, std::string const &postData, unsigned long int timeout);

        // Initialisation du client sur le port spécifié pour se connection au serveur
        bool start(const char *url);
        bool start(const char *serverIP, unsigned int port);
        // Le traitement régulier du client en cours d'exécution pour lire le SOCKET
        bool process(std::string *targetBuffer);
        // Envoie de données du client au serveur
        bool sendTo(std::string const &dataToSend);
        // Arrête le client
        void stop();

        // Permet de savoir si le socket du client est valide et en écoute
        bool isRunning();

    protected :
    private :
};

}        // Fin "namespace USpeedGameEngine"

#endif
