Bonjour,
Je suis entrain de développer un client et un serveur en C++. Le client et le serveur communique par socket TCP.
Pour cela, j'utilise la librairie Boost et je me suis inspiré de ce très bon tutoriel : http://gwenael-dunand.developpez.com...pp/boost/asio/.
Pour résumer, dans ce tutoriel, on sérialise un objet (par exemple ChatMessage) et on envoit au serveur cette objet sérialisé pour qu'il puisse le déserialiser. La classe tcp_connection utilise un template pour envoyer/recevoir des paquets afin d'avoir des fonctions génériques.
Voici le prototype de ces 2 méthodes de la classe tcp_connection :
Mais actuellement, si le client envoie un objet de classe A, il recevra de la part du serveur que des objets de classe A. Car c'est le client qui met en paramètre de la méthode async_read une référence vers un objet de classe A.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 template <typename T, typename Handler> void async_write(const T& t, Handler handler); template <typename T, typename Handler> void async_read(T& t, Handler handler);
J'aimerai donc que le client envoie un objet de classe A et il recevra de la part du serveur un objet de classe A ou de classe B.
J'ai pensé à ajouter dans le header des paquets envoyés le nom de classe sérialisée. Mais, cela ne règle qu'une partie du problème, car je ne vois comment renvoyer une référence vers objet de classe A ou de classe B (peut-être une classe abstraite, dont hérite la classe A et la classe B?).
J'aimerai donc avoir un avis sur les solutions qui s'offrent à moi.
Merci d'avance
Partager