Varios canales
Ejemplo práctico de una única conexión participando en varios canales simultáneamente.
Varios canales
Eco permite que una misma conexión participe en varios canales al mismo tiempo. Este comportamiento es especialmente importante en arquitecturas donde el jugador mantiene un contexto persistente y, simultáneamente, participa en una partida, chat, lobby o sesión secundaria.
No uses idUltimoCanal como contexto global
Eco.idUltimoCanal existe como ayuda de compatibilidad y para determinados callbacks. Cuando un jugador está en varios canales, especifica siempre el idCanal de la operación.
Modelo
Una conexión
│
├── Canal 10 → Mundo
├── Canal 20 → Partida
└── Canal 30 → ChatEntrar en varios canales
Eco.UnirseACanal(10, "Mundo", true, salirDeActual: false);
Eco.UnirseACanal(20, "Arena", false, salirDeActual: false);Comprueba cada canal por separado:
bool mundo = Eco.EstaEnCanal(10);
bool partida = Eco.EstaEnCanal(20);
Canal canalPartida = Eco.ObtenerCanal(20);Datos por canal
Eco.EstablecerDatosCanal(10, "Estado/Clima", "Noche");
Eco.EstablecerDatosCanal(20, "Estado/Ronda", 4);Nunca asumas que ObtenerDatosCanal se refiere al último canal utilizado: recibe explícitamente el ID.
Objetos por canal
Los objetos tienen su propio channelID.
Objeto objetoMundo = ...;
Objeto objetoPartida = ...;
Debug.Assert(objetoMundo.channelID == 10);
Debug.Assert(objetoPartida.channelID == 20);Las operaciones de instanciación y envío deben utilizar el canal del objeto o el canal explícito del contexto.
Salir de un canal
Eco.SalirDeCanal(20);
if (Eco.EstaEnCanal(10))
{
// El mundo sigue activo.
}La conexión continúa activa y el cliente puede seguir participando en los demás canales.
Patrón recomendado
Mantén el contexto explícito
Guarda el ID del canal en el sistema que representa ese contexto (mundo, partida, chat, etc.).
Pasa el canal a las operaciones
Evita depender de variables globales como idUltimoCanal para decidir dónde se ejecuta una operación.
Mantén los objetos ligados a su canal
Usa objeto.channelID como fuente de verdad para operaciones específicas de una entidad.
Relación con TNet
La documentación histórica de TNet ya contemplaba múltiples canales, pero Eco lo incorpora como una capacidad fundamental del runtime actual y la expone mediante su fachada Eco.
Canales
Modelo completo de canales y pertenencia.
Eco
API de la fachada para trabajar con varios canales.
