D'accord, merci :) En effet, cela paraît mieux.
Bon, je n'ai pas traité l'authentification, vu que je suis en MITM, et qu'il fallait que j'intercepte un paquet et le modifie, mais je ne pense pas que ce que tu as fait est très pratique, sauf pour l'authentification ou des action purement itératives.
A ta place, je ferais une fonction authentification() qui reçoit HelloConnectMessage puis appelle parseur(42) (je crois), parseur appelle le deserialize qui fait son boulot. Après, retour dans authentification() qui appelle le serialize de IdentificationMessage avec les paramètres adéquats, éventuellement présents dans les arguments de authentification().
Ou alors plus simple, tu appelles directement les classes de l'authentification dans la fonction authentification(), sans t'embêter, puisque le parser sert uniquement quand tu reçois des messages inconnus, alors que l'authentification est un processus distinct en soi, car il respecte un protocole précis et ne dépend pas de l'arbitraire des actions des autres joueurs (sauf pour la connexion au serveur de jeu, mais même là, tu as connaissance des paquets qui te seront envoyés). Pour le reste du jeu, tu peux faire un thread qui reçoit les paquets et modifie les variables du jeu avec les informations qu'il contient, un thread qui est ton AI et qui crée parfois des évènements pour que le troisième thread d'envoi fasse les actions appropriées. Mais pour cette dernière phrase, je ne suis pas totalement sûr parce que je ne suis pas un expert en programmation réseau multi-thread ou évènementielle.
Encore une petite question : pourquoi est-ce que ton parseur reçoit comme argument un id et pas un paquet ? Chez moi, le parseur reçoit un paquet, sépare les informations qu'il contient, et passe les données au deserialize adéquat.