logo
Modelo de red

Canales

Ámbitos de estado compartido, pertenencia, persistencia y ciclo de vida de los canales de Eco.

Canales

Un Canal define un ámbito de estado compartido dentro de Eco. Agrupa jugadores, objetos, nivel, datos y operaciones persistentes que pertenecen a una misma sesión lógica.

Canal ≠ conexión

Una conexión física puede participar en varios canales simultáneamente. Nunca modeles un canal como si fuera un socket.

Qué contiene un canal

Jugadores

Participantes que pertenecen al ámbito del canal y pueden recibir su estado.

Objetos

Entidades de red cuyo channelID identifica el contexto donde viven.

Estado

Nivel, datos del canal y RFC/estado que deben poder reconstruirse.

Autoridad

Host, ownership y reglas de modificación que dependen del contexto del canal.

Modelo mental

Conexión

├── Canal 10 · Mundo
│   ├── Jugador A
│   ├── Jugador B
│   └── Objetos

├── Canal 20 · Partida
│   ├── Jugador A
│   └── Objetos

└── Canal 30 · Evento
    └── Jugador C

Estado relevante

La implementación mantiene propiedades como id, level, isPersistent, isClosed, isLeaving, playerLimit, jugadores, rfcs, created, destroyed y host.

No todas estas propiedades deben ser manipuladas directamente. Parte de ellas representan el estado interno que mantiene Eco durante las transiciones.

Entrada al canal

Solicitar la entrada [step]

cliente.JoinChannel(
    channelID: 10,
    levelName: "Arena",
    persistent: false,
    playerLimit: 4,
    password: ""
);

Esperar la confirmación [step]

Eco registra el identificador como pendiente mientras espera la respuesta del servidor. Durante esta fase no debes tratar el canal como completamente operativo.

Comprobar la pertenencia [step]

if (cliente.IsInChannel(10))
{
    Canal canal = cliente.GetChannel(10);
}

IsJoiningChannel(10) permite diferenciar el estado pendiente del estado confirmado.

Varios canales

Mundo + partida
cliente.JoinChannel(10, "Mundo", true, 100, "");
cliente.JoinChannel(20, "Partida", false, 4, "");
Jugador A

   ├── Canal 10 → mundo persistente
   └── Canal 20 → partida actual

Consulta la guía Varios canales simultáneos para un workflow completo.

Salir de un canal

cliente.LeaveChannel(20);

Abandonar un canal no desconecta al cliente y no elimina automáticamente su pertenencia a otros canales.

Para cerrar todos los contextos activos:

cliente.LeaveAllChannels();

Nivel, host y persistencia

El canal también es el contexto de operaciones coordinadas como el cambio de nivel y la persistencia.

El canal representa una sesión que puede cerrarse y liberar su estado cuando ya no quedan participantes y no existen condiciones que lo mantengan abierto.

El canal puede mantener su estado sin jugadores activos para poder ser recuperado posteriormente.

Reglas de diseño

Diseña por ámbito

Si dos sistemas necesitan ciclos de vida diferentes, considera separarlos en canales distintos. Si sólo necesitas enviar una orden diferente a un jugador, probablemente no necesitas otro canal.

NecesidadCanal
Mundo persistente
Partida independiente
Evento temporal aislado
Mensaje a un solo jugadorNo necesariamente
Separar TCP/UDPNo
Identificar una entidadNo; usa Objeto

Correspondencia con TNet

TNetEco
ChannelCanal
TNManager.JoinChannelClienteJuego.JoinChannel
TNManager.LeaveChannelClienteJuego.LeaveChannel
TNManager.IsInChannelClienteJuego.IsInChannel
TNManager.GetChannelClienteJuego.GetChannel

Referencias

On this page