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 CEstado 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
cliente.JoinChannel(10, "Mundo", true, 100, "");
cliente.JoinChannel(20, "Partida", false, 4, "");Jugador A
│
├── Canal 10 → mundo persistente
└── Canal 20 → partida actualConsulta 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.
| Necesidad | Canal |
|---|---|
| Mundo persistente | Sí |
| Partida independiente | Sí |
| Evento temporal aislado | Sí |
| Mensaje a un solo jugador | No necesariamente |
| Separar TCP/UDP | No |
| Identificar una entidad | No; usa Objeto |
Correspondencia con TNet
| TNet | Eco |
|---|---|
Channel | Canal |
TNManager.JoinChannel | ClienteJuego.JoinChannel |
TNManager.LeaveChannel | ClienteJuego.LeaveChannel |
TNManager.IsInChannel | ClienteJuego.IsInChannel |
TNManager.GetChannel | ClienteJuego.GetChannel |
