Bonjour,
J'ai un problème de conception au niveau d'une application client/serveur. J'ai construit un protocole, où chaque type de packet à un numéro (packet 1 : chat, packet 2 : combat ...) et où quand je le reçois il faut que j'execute une fonction pour le traiter. La première solution bourrin qui viens à l'esprit :
Ca marche avec 2 ID, j'en ai plus de 100 ... Pour des raisons de performances et de "beauté" du code cette solution est à jeter.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 unsigned int ID = get_id_from_packet( packet ); switch( ID ) { case 1 : chat_packet( packet ); break; case 2 : war_packet( packet ); break; // .... }
La solution actuellement implémentée utilise les pointeurs de fonction.
Ca marche, c'est performant, mais c'est pas beau et c'est une technique que j'utilise en C surtout. Or ici je souhaiterais faire du C++, du vrai
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 typedef void (*ptr_function)( unsigned char * ); ptr_function packet_function[100]; // Ensuite j'initialise chaque packet_function[i] pour pointer vers la fonction qui correspond au packet dont l' ID == i. packet_function[1] = chat_packet; packet_function[2] = war_packet; // .... // Ce qui me permet de faire à la réception d'un packet : int ID = get_ID_from_packet( packet ); packet_function[ID]( packet );. Donc je voulais savoir s'il existait une solution de conception pour ce genre de situation ?
Merci beaucoup.
Partager