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 :
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;
// ....
}
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.

La solution actuellement implémentée utilise les pointeurs de fonction.
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 );
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 . Donc je voulais savoir s'il existait une solution de conception pour ce genre de situation ?

Merci beaucoup.