Table des matières
Les requêtes
Les requêtes sont des groupes de données traitées autant par le client que par le serveur.
Si l'un envoie une requête, l'autre la réceptionne et la traite.
Problème d'implémentation
- implémentation de masse : beaucoup de requêtes différentes sont prévisibles
- implémentation double : le serveur et le client traite chaque type de requête
Essais d'implémentation
Factory
- une usine RequestProcessFactory initialisée par un fichier xml externe
- chaque requête a un en-tête lié à un objet ProcessFactory qui traite la requête spécifique
- pour envoyer la requête, on utilise le ProcessFactory qui possède aussi un moyen de création de requête
⇒
- + : les requêtes sont distinctes
- - : il faut créer les ProcessFactory en double, un pour le client et un pour le serveur
- - : très verbeuse, la création d'une classe produit beaucoup de code, est longue et lente
Enum switch
- une énumération liste tous les types de requêtes (en-tête = constante d'énumération)
- chaque requête est traitée dans son bloc lié à son type / en-tête par une constante
⇒
- + : les constantes sont définies autant pour le serveur que pour le client, d'une pierre deux coups
- + : très compact, rapide à développer
- - : les requêtes sont non-distinctes
Enum switch +
Le système d'énumération est compact, supprime les doublons, mais pose un problème de portabilité et de distinction.
Pour améliorer la portabilité :
- utiliser un arbre de constantes ⇒ regroupement de constantes
- séparer le connecteur d'envoi et réception du gestionnaire de traitement des requêtes
- au pire, créer autant de gestionnaires de traitement que de groupes de requêtes
Ainsi, la requête est composé de :
- un en-tête de trois caractères :
- le type (groupement de requêtes tel que le registre, la session ou les actions)
- le mode (sous-groupement de requêtes tel que la création, l'ajout, la mise à jour, l'obtention, le listing, la suppression)
- un complément informatif définissant la requête plus précisément
- un contenu non-limité, se terminant par le caractore nul
\0
Par exemple :
- requête pour un nouveau mouvement
- type : action
- mode : création
- info :
mcommemouvement
- requête pour la mise à jour de l'action d'un personnage
- type : registre
- mode : mise à jour
- info :
lcommelife
- requête d'oubli d'une compétence
- type : registre
- mode : suppression
- info :
scommeskill
- requête de sauvegarde
- type : session
- mode : obtention / mise à jour
- info :
wcommewrite ouscommesauvegarder /save
…