Je travaille sur une application qui reçoit un message binaire brut (très simple, le premier octet est le type de message, reste est une charge utile), puis fait quelque chose avec elle. Ce que j'essaie de faire, c'est de m'assurer que le service de réseautage est éloigné du reste de l'application, pour permettre de modifier le protocole de temps en temps sans trop affecter le reste de l'application. Le contexte de l'application est un jeu client-serveur très simple, pour lequel je fais le travail du client maintenant.Encapsulation d'un protocole réseau
Je me bats un peu maintenant. Je dois trouver une manière élégante de simplement jeter une connexion dans une sorte de service de traducteur/adaptateur, qui renvoie de jolis objets (je pense). Ces objets seront jetés dans une file d'attente en attente de consommation par le reste de l'application. Le problème que je suis face est plus ou moins cette construction (pseudo code):
Supposons que chaque message est 20 octets, donc je peux faire face à appeler cette fonction pour chaque 20 octets:
public Message GetMessage(byte[] buffer)
{
switch(buffer[0])
{
case 1:
return Message1(...);
case 2:
return Message2(...);
.....
case n:
return MessageN(...);
}
}
Évidemment, je vais utiliser une énumération ou des constantes pour l'affaire, mais ce n'est pas ce qui me dérange. Voici la chose. Je pense que j'ai environ 50 types de message, ce qui signifie que je vais obtenir une déclaration de commutateur avec 50 cas. Je ne peux pas vraiment penser à une manière appropriée de découper ceci en morceaux plus petits, qui résulteront en une méthode énorme, sujette aux erreurs. Je me demandais s'il y avait des motifs pour rendre cela plus facile, car je n'en trouvais pas.
Merci pour la contribution à l'avance!
C'est l'option que j'ai choisie, y compris les classes de gestionnaire séparées. Semble être le meilleur moyen de séparer le peu de logique qui traite chaque message séparé. –
Ok! Que, comme dirait Ned Flanders, vous faites tout par le livre. –