IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Probl�me de conception : copy de classe interdite


Sujet :

C++

  1. #1
    Membre chevronn�

    Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Novembre 2009
    Messages
    377
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 377
    Par d�faut Probl�me de conception : copy de classe interdite
    Bonjour,

    je rencontre un petit soucis de conception de mon application.

    Je suis en train de faire une classe qui ex�cute des requ�tes HTTPS/HTTP avec la librairie r�seau Poco::Net.

    Mon soucis est le suivant, lorsque l'on ex�cute une requ�te, les param�tres du header et le body sont dans deux �l�ments distincts :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // istream = body		res = header.
    std::istream& rs =  m_session.get()->receiveResponse(res);
     
    // On peut certainement mieux faire si vous avez une idée..
    uint32_t len;
    rs.read((char*)& len, 2);
    std::string test(len, '\0');
    rs.read(&test[0],len);
    J'aimerai avoir un objet qui contient � la fois le header et le body et le retourner lorsque l'on effectue une requ�te, voila la signature :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    ResponseHTTP sendHttpsRequest();
    Seulement voila le Poco::Net::HTTPResponse d�clare le copie en priv� :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    private:
    	enum Limits
    	{
    		MAX_VERSION_LENGTH = 8,
    		MAX_STATUS_LENGTH  = 3,
    		MAX_REASON_LENGTH  = 512
    	};
     
    	HTTPStatus  _status;
    	std::string _reason;
     
    	HTTPResponse(const HTTPResponse&);
    	HTTPResponse& operator = (const HTTPResponse&);
    };
    Comment faire cela proprement ? (Il est toujours possible de copier tous les champs de la httpResponse, mais je pense qu'il doit exister mieux).

    Merci de votre aide.

  2. #2
    Membre tr�s actif

    Homme Profil pro
    �tudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Par d�faut
    La copie est d�clar�e en priv�e pour �viter que les objets de type Response ne soient dupliqu�s mais ce n'est pas un probl�me au contraire. Je n'arrive pas � comprendre ce qui te g�ne du coup ?

    Si l'objet de type Response de Poco contient ton header et ton body c'est bien ce que tu veux du coup tu l'as

    Je me demande d'ailleurs : en terme de s�curit� ce ne serait pas normal ?

  3. #3
    Membre chevronn�

    Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Novembre 2009
    Messages
    377
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 377
    Par d�faut
    Si l'objet de type Response de Poco contient ton header et ton body c'est bien ce que tu veux du coup tu l'as
    L'objet de poco ne contient que le header, le body est dans le stream.

    La copie est d�clar�e en priv�e pour �viter que les objets de type Response ne soient pas dupliqu�s mais ce n'est pas un probl�me au contraire. Je n'arrive pas � comprendre ce qui te g�ne du coup ?
    Le truc c'est que je fais une classe cliente http. J'aimerai que l'utilisateur puisse faire quelque chose ressemblant a :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    HTTPSClient client;
     
    client.setURL("blalbla");
     
    // Response http contient l'entier du message (HTTPResponse + string)
    ResponseHTTP response= client.sendRequest()
     
    // Traitement de la requête ..
    // Exemple voir si elle s'est bien déroulé.
     
    if (response.getStatus != 200)
    {
       std::cout << "Une erreure est survenu...." << std::endl;
    }
    Mais comme la copie est en priv� je ne peux pas retourner un HTTPResponse.

    J'esp�re que je suis un peu plus claire sinon n'h�siter pas � demander des pr�cisions

    Je me demande d'ailleurs : en terme de s�curit� ce ne serait pas normal ?
    J'ai pas compris ce que tu veux dire par la.

  4. #4
    Membre �m�rite

    Profil pro
    Inscrit en
    D�cembre 2008
    Messages
    533
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2008
    Messages : 533
    Par d�faut
    Si cette lib Poco ne g�re pas la s�mantique de mouvement qui concerne pr�cis�ment ce genre de cas, il est toujours possible de contourner le probl�me avec un shared_ptr.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    typedef std::shared_ptr<HTTPResponse> HTTPResponsePtr;
     
    ResponseHTTPPtr sendHttpsRequest() { ... }
     
    ...
     
    HTTPResponsePtr response = sendHttpsRequest();
    response->method();

  5. #5
    Membre chevronn�

    Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Novembre 2009
    Messages
    377
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 377
    Par d�faut
    Oui c'est une bonne piste, je me demande alors quelle est la meilleure solution :

    1. Etendre la classe HTTPResponse, et utiliser des sharedPtr en retour :


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     
    typedef std::shared_ptr<ResponseHTTP> ResponseHTTPPtr;
     
    // Signature d'une requête https :
    ResponseHTTPPtr sendHttpsRequest();
     
    // Classe retourné par les requêtes
    class ResponseHTTP : public Poco::Net::HTTPResponse
    {
       public:
           // ... setter/getter m_body
     
        private:
           std::string m_body;
    }
    Ou alors d'int�grer le Poco::Net::HTTPResponse dans mon conteneur.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     
    typedef std::shared_ptr<HTTPResponse> HTTPResponsePtr;
     
    // Signature d'une requête https :
    ResponseHTTP sendHttpsRequest();
     
    // Classe retourné par les requêtes
    class ResponseHTTP : public Poco::Net::HTTPResponse
    {
       public:
           // Accès directe aux datas en publique.
           shared_ptr<HTTPResponse> m_header;
     
        private:
           std::string m_body;
     
    }

    Merci

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Diagramme de classe : Probl�me de conception
    Par looking_4truth dans le forum Diagrammes de Classes
    R�ponses: 2
    Dernier message: 11/07/2012, 23h35
  2. probl�me de conception des salle modulable dans un diagramme de classe
    Par sampaiX dans le forum Diagrammes de Classes
    R�ponses: 2
    Dernier message: 21/04/2010, 00h18
  3. R�ponses: 0
    Dernier message: 09/11/2008, 14h33
  4. [d�butant]Probl�me de conception de class
    Par pingoui dans le forum Langage
    R�ponses: 23
    Dernier message: 07/04/2008, 10h30
  5. [POO] Classe Abstract : probl�me de conception
    Par viviboss dans le forum Langage
    R�ponses: 22
    Dernier message: 14/12/2006, 15h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo