Wox-xion Dev wiki

xvoe:requests

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

  1. une usine RequestProcessFactory initialisée par un fichier xml externe
  2. chaque requête a un en-tête lié à un objet ProcessFactory qui traite la requête spécifique
  3. 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

  1. une énumération liste tous les types de requêtes (en-tête = constante d'énumération)
  2. 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 :
    1. le type (groupement de requêtes tel que le registre, la session ou les actions)
    2. le mode (sous-groupement de requêtes tel que la création, l'ajout, la mise à jour, l'obtention, le listing, la suppression)
    3. 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 : m comme mouvement
  • requête pour la mise à jour de l'action d'un personnage
    • type : registre
    • mode : mise à jour
    • info : l comme life
  • requête d'oubli d'une compétence
    • type : registre
    • mode : suppression
    • info : s comme skill
  • requête de sauvegarde
    • type : session
    • mode : obtention / mise à jour
    • info : w comme write ou s comme sauvegarder / save

xvoe/requests.txt · Dernière modification: 2011/09/04 23:35 (modification externe)