logo
Transporte

Serialización en profundidad

Cómo Buffer, Nodo y las interfaces de serialización encajan en el protocolo de Eco.

Serialización en profundidad

La serialización es el puente entre un objeto C# y los bytes que realmente viajan por la red. DeepWiki destaca DataNode, Buffer y las extensiones de serialización como una de las piezas centrales de TNet; en Eco la misma arquitectura se expresa mediante Nodo, Buffer y sus contratos de serialización.

Dos representaciones principales

Buffer

Buffer es la representación binaria de transporte. Está orientado a escribir y leer valores en el orden exacto que espera el protocolo.

C#

 ├── writer.Write(...)
 └── writer.WriteArray(...)

      Buffer

      bytes

Al recibir datos ocurre el proceso inverso:

bytes

Buffer / BinaryReader

r.Read(...)
r.ReadArray(...)

C#

Buffer es apropiado para paquetes y mensajes que necesitan una representación compacta y determinista.

Nodo

Nodo representa datos jerárquicos:

Jugador
├── Nombre
├── Nivel
├── Inventario
│   ├── Espada
│   └── Pociones
└── Configuracion
    └── Volumen

Esto resulta especialmente útil para datos de jugador, servidor, canal y estado persistente.

Serialización de tipos propios

Eco admite contratos que permiten a un tipo C# convertir su estado en datos serializables y reconstruirse después. En el modo offline, Eco.EstablecerDatosJugador incluso fuerza el ciclo de serialización/deserialización para mantener un comportamiento equivalente al remoto en ciertos tipos.

La regla práctica es:

¿Es un dato simple?
 ├── Sí → primitivas / arrays / tipos soportados

 └── No
      ├── ¿Necesita estructura editable? → Nodo
      └── ¿Necesita formato binario propio? → contrato de serialización

Orden y compatibilidad

Un paquete binario no tiene nombres de propiedades que permitan adivinar cómo leerlo. El emisor y el receptor deben coincidir en:

  • tipo
  • orden
  • cantidad de valores
  • representación utilizada

Por eso un cambio aparentemente inocente en el orden de escritura puede romper la lectura remota.

Nodo no sustituye a Buffer

Nodo y Buffer trabajan a niveles diferentes.

HerramientaProblema que resuelve
Buffertransporte binario y protocolo
Nododatos jerárquicos y estado estructurado
Paqueteidentifica qué operación contiene el buffer
Serializadoresconvierten tipos propios

Evita convertir todo a Nodo sólo porque sea cómodo. Para tráfico frecuente, un formato binario específico suele ser mucho más apropiado.

Compresión y formatos de persistencia

La arquitectura heredada de TNet contempla diferentes formatos para datos persistentes, incluidos binario y LZMA. Eco conserva piezas de esa infraestructura, pero la elección de formato debe considerarse parte de persistencia y no de cada RFC individual.

La compresión suele ser interesante cuando el coste de almacenamiento o transferencia domina; para mensajes pequeños y frecuentes añade complejidad innecesaria.

Serialización y seguridad

La serialización no valida reglas de juego. Que un cliente pueda serializar oro = 999999 no significa que el servidor deba aceptarlo.

Serialización

Validación

Autorización

El servidor debe validar tamaños, tipos esperados, límites de gameplay y permisos antes de aplicar datos sensibles.

Diagnóstico de errores

Cuando un paquete falla al reconstruirse, el error puede aparecer lejos del lugar donde se escribió originalmente. Para investigar:

Captura el tipo de Paquete

Determina qué operación estaba siendo procesada.

Comprueba el orden de lectura y escritura

Compara exactamente Write(...) con Read(...).

Comprueba arrays y longitudes

Un array leído con una estructura distinta desincroniza el resto del buffer.

Comprueba el tipo

Asegúrate de que ambos lados usan la misma representación y serializer.

La compatibilidad binaria es una responsabilidad de la API

No cambies el formato de un paquete crítico sin considerar clientes antiguos conectados, datos persistentes y cualquier punto donde Eco reenvíe o almacene el mensaje.

Buffer

API y conceptos básicos de Buffer.

Serialización avanzada

Tipos propios y escenarios avanzados.

On this page