Problema
El protocolo binario del juego está implementado dos veces, sin nada que garantice que las dos versiones coincidan:
| Archivo |
Líneas |
frontend/lib/aowProtocol.ts |
2.275 |
server/src/protocol.ts |
4.430 |
Son dos definiciones separadas del mismo formato de bytes. Si alguien agrega un paquete o cambia el orden de un campo en un lado y se olvida del otro, el juego no falla al compilar: falla en runtime, con datos corruptos y comportamiento raro que es muy difícil de rastrear hasta la causa.
Es el tipo de bug que le va a pasar a cualquier contribuidor nuevo que toque el protocolo.
Referencia
El proyecto elpatoenlasolas/argentum-web (MIT) resolvió esto con un packages/protocol compartido dentro de un monorepo pnpm: los tipos y la definición del protocolo viven en un solo lugar y los importan tanto el cliente como el servidor.
Alcance
- Extraer a un paquete compartido lo que hoy está duplicado:
- identificadores de paquete (opcodes)
- forma de cada mensaje
- constantes compartidas (rangos de visión, tamaños)
- Que cliente y servidor importen de ahí, en vez de tener cada uno su copia.
- Que un cambio incompatible rompa la compilación, que es exactamente lo que hoy no pasa.
- Tests de ida y vuelta: serializar y deserializar cada tipo de paquete y verificar que se recupera lo mismo.
Lo difícil
No es un copiar y pegar. Las dos implementaciones probablemente divergieron en detalles, y hay que reconciliarlas antes de unificar. Conviene:
- Empezar por los opcodes y las constantes, que es lo más fácil y lo que más se desincroniza
- Migrar los paquetes de a uno, no todos juntos
- Dejar tests de ida y vuelta antes de tocar nada, para tener red
Criterios de aceptación
Nota
Se puede hacer por partes y cada parte deja el juego funcionando. No hace falta migrar los 6.700 renglones de una vez.
Problema
El protocolo binario del juego está implementado dos veces, sin nada que garantice que las dos versiones coincidan:
frontend/lib/aowProtocol.tsserver/src/protocol.tsSon dos definiciones separadas del mismo formato de bytes. Si alguien agrega un paquete o cambia el orden de un campo en un lado y se olvida del otro, el juego no falla al compilar: falla en runtime, con datos corruptos y comportamiento raro que es muy difícil de rastrear hasta la causa.
Es el tipo de bug que le va a pasar a cualquier contribuidor nuevo que toque el protocolo.
Referencia
El proyecto elpatoenlasolas/argentum-web (MIT) resolvió esto con un
packages/protocolcompartido dentro de un monorepo pnpm: los tipos y la definición del protocolo viven en un solo lugar y los importan tanto el cliente como el servidor.Alcance
Lo difícil
No es un copiar y pegar. Las dos implementaciones probablemente divergieron en detalles, y hay que reconciliarlas antes de unificar. Conviene:
Criterios de aceptación
Nota
Se puede hacer por partes y cada parte deja el juego funcionando. No hace falta migrar los 6.700 renglones de una vez.