[C++][Socket] Evenement asynchrone

Résolu
rosewood -  
rosewood Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai créé une class CClientSocket pour gérer les communications par socket du côté client. Cette class permet de se connecter, d'effectuer des requêtes (via un timer qui va lire une pile de messages) et de traiter les répones du serveur aux requêtes.
Auparavant, j'avais également une class de type CDialog qui me servait d'interface graphique. La class CClientSocket envoyait un message AFX (avec les données associées) à la class CDialog lorsque l'on avait recu une reponse du serveur.
Aujourd'hui, au lieu de la class CDialog, j'utilise une autre class qui va me servir d'interface avec une autre application. J'aimerai en fait que CClientSocket previenne cette nouvelle class lorsque l'on recoit une reponse du serveur.
Comment peut-on envoyer un evenement aynchrone à cette nouvelle class (via une callback peut être ?) pour la prevenir de la reception d'une reponse (avec ses données associées) ? (comment met on en place un système de callback appelé sur évenement ?)
J'aimerai en fait éviter que la class d'interface n'ai à scruter un buffer périodiquement (ce que fait deja la class CClientSocket).

Merci d'avance pour votre aide.

2 réponses

starmad88 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
Je fairait une chose assez proche des listener en Java:

class Receveur{
  public:
    void recevoirEvenement(){
      // faire quelque chose
    }
};
class Emetteur{
  public:
    void AjouterReceveur(Receveur receveur){
      // ajouter le receveur à une liste
    }

    // Dans une fonction quelquonque :
      receveur.recevoirEvenement();
};

Bien sur tu adaptes à ton problème
0
rosewood Messages postés 1 Date d'inscription   Statut Membre Dernière intervention  
 
Dans mon cas, la class CClientSocket (Emetteur) se situe dans la class Interface (Receveur):
Class CInterface:
{
public:
CClientSocket socket;

void RequestInfoType1() { socket.request() }
void ReceiveInfoType1();
}

Class CClientSocket
{
public:

void request();
void receive();
}

J'utilise la class CClientSocket pour envoyer mes requêtes mais pour recevoir la reponse, je ne sais pas comment faire le lien entre receive (CClientSocket) et ReceiveInfoType1(Interface).

Est ce qu'une class interne peut appeler une methode de la class externe ?
0