Cliente
Ciclo de vida de ClienteJuego, conexión, canales, transporte y estado de sesión.
Cliente
ClienteJuego contiene la lógica cliente de Eco: conexión, procesamiento de paquetes, canales, jugador local, transporte y modo servidor local.
Fachada frente a implementación
Desde gameplay normalmente trabajarás con la fachada Eco y componentes de alto nivel. ClienteJuego es el runtime que mantiene el estado y ejecuta las operaciones de red.
Anatomía
Conexión
Gestiona TCP y las etapas del handshake.
Canales
Mantiene los canales activos y las solicitudes de unión pendientes.
Jugador local
Expone identidad, nombre y playerData del participante local.
Transporte
Utiliza TCP como camino principal, UDP cuando está disponible y IConnection para conexiones personalizadas.
Estados de sesión
isTryingToConnect
│
▼
isConnected
│
├── isJoiningChannel
│ │
│ ▼
└──── isInChannelEstos estados no son intercambiables. Estar conectado no implica pertenecer a un canal.
Conexión
Iniciar
cliente.Connect(endpoint);Esperar el handshake
Connect sólo inicia el proceso. Comprueba isConnected antes de usar operaciones que requieren una sesión confirmada.
Comprobar el estado
if (cliente.isConnected)
{
// Puede solicitarse una operación dependiente del servidor.
}Canales
El cliente mantiene una colección de canales y otra de identificadores que todavía se están uniendo.
bool dentro = cliente.IsInChannel(10);
bool pendiente = cliente.IsJoiningChannel(10);
Canal canal = cliente.GetChannel(10);Puede participar simultáneamente en varios canales:
cliente.JoinChannel(10, "Mundo", true, 100, "");
cliente.JoinChannel(20, "Partida", false, 4, "");Consulta Canales para entender qué significa esta pertenencia.
Transporte
Es el transporte principal de la sesión y del protocolo fiable.
Es opcional y se utiliza cuando la configuración y la plataforma permiten tráfico de baja latencia.
Permite abstraer la conexión subyacente para integraciones personalizadas que no utilizan directamente el socket estándar.
Procesamiento de paquetes
El cliente recibe datos y los convierte en Paquete y operaciones de runtime.
bytes
↓
Buffer
↓
Paquete
↓
ClienteJuego
↓
Canal / Objeto / JugadorClienteJuego mantiene además contadores de paquetes y bytes enviados/recibidos. Su implementación contempla opciones para limitar y perfilar el trabajo realizado por frame.
Tiempo y diagnóstico
El cliente expone información como:
cliente.serverTime;
cliente.serverUptime;
cliente.ping;
cliente.sentPackets;
cliente.receivedPackets;Estos valores son útiles para diagnóstico, pero no deben utilizarse como fuente única de verdad para reglas de gameplay.
Datos del jugador
El cliente distingue entre datos del objeto y datos del participante:
cliente.playerData;
cliente.SetPlayerData("perfil/nivel", 12);
cliente.SyncPlayerData();Consulta Sincronizar los datos del jugador.
Servidor local
ClienteJuego puede utilizar un ServidorJuego local sin sockets. Esto conserva el flujo lógico de cliente-servidor, pero no debe utilizarse como única validación de comportamiento de red real.
Guía: Servidor local
Workflow para levantar cliente y servidor dentro del mismo proceso.
Desconexión
cliente.Disconnect();La desconexión cierra la sesión y permite que el runtime libere sus dependencias de transporte.
No limpies el estado a mano sin entender el runtime
Si tu juego mantiene referencias propias a jugadores, canales u objetos, enlázalas a los callbacks de ciclo de vida de Eco en lugar de asumir que el orden de destrucción de Unity será suficiente.
Correspondencia con TNet
| Eco | TNet | Responsabilidad |
|---|---|---|
ClienteJuego | GameClient | Runtime cliente |
ProtocoloTcp | TcpProtocol | Transporte TCP |
ProtocoloUdp | UdpProtocol | Transporte UDP |
Jugador | Player | Participante |
