8000
Skip to content

Réaligner les paquets du protocole WebSocket sur ceux du jeu #4776

Description

@BastLast

Contexte

WsPackets décrit le format transmis entre l'app et RestWs. Il redéclare volontairement ce dont il a besoin plutôt que d'importer Lib, pour que le format reste stable quand le jeu évolue. Mais rien ne signale qu'un paquet a cessé de correspondre à celui qu'il représente, et la dérive s'est déjà produite plusieurs fois.

Ce qui a été constaté :

  • /drink : les paquets existaient sans aucun traducteur et décrivaient une version antérieure de la commande. DrinkReq portait force et slot alors que CommandDrinkPacketReq n'a aucun champ, la réponse annonçait health/energy/time au lieu de value/itemNature, et deux paquets ne correspondaient plus à rien. Corrigé dans Valider la boucle des collecteurs de bout en bout sur /drink #4669.
  • ProfileRes ne transporte ni tokens ni cooking, deux blocs que CommandProfilePacketRes contient et que Discord affiche.
  • InventoryRes ne transporte ni les matériaux, ni le jardin, ni les trois talismans, tous présents dans CommandInventoryPacketRes.

Un écran construit sur ces paquets afficherait un profil et un inventaire incomplets, sans qu'aucune erreur ne le signale : la compilation reste verte parce que les deux définitions sont indépendantes.

Le même angle mort existe sur les types recopiés. RestWs/__tests__/packets/WireEnums.test.ts couvre déjà ItemNature et ItemRarity, dont les membres réordonnés changeraient silencieusement de sens pour les clients installés, mais rien ne protège MainItem, SupportItem, MainItemStat ou ValueAndMax.

Périmètre

Inclus

  • Le réalignement des paquets du protocole sur les paquets du jeu correspondants
  • Un contrôle automatique qui échoue quand un paquet du jeu porte un champ que son équivalent protocole ignore, avec la possibilité de déclarer une omission volontaire
  • L'extension du contrôle des valeurs recopiées aux types, et non plus seulement aux énumérations

Hors périmètre

  • L'exposition de nouvelles commandes au protocole, traitée par les issues dédiées
  • L'affichage de ces champs dans l'app

Terminé quand

  • Aucun paquet du protocole ne perd un champ de son équivalent côté jeu, sauf omission déclarée et justifiée
  • Ajouter un champ à un paquet du jeu sans le répercuter fait échouer une vérification automatique, avec un message qui nomme le paquet et le champ
  • Un type recopié dans WsPackets qui s'écarte de sa source fait échouer un test
  • Le profil et l'inventaire transportent les mêmes informations que celles dont dispose Discord
  • pnpm tsc, pnpm eslint et pnpm test passent dans WsPackets et RestWs

Metadata

Metadata

Assignees

Labels

appChanges needed specifically for the appnot end userChange that will not impact players in gamerefactoringNo visible changes but code improvedtestChecking that something works as intended

Type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions

0