Canal
Referencia de un ámbito compartido de red, sus jugadores, objetos, RFC y persistencia.
Canal
Canal representa un ámbito lógico de estado compartido. Un mismo cliente puede pertenecer a varios canales y un canal puede contener jugadores, objetos dinámicos, datos y operaciones persistentes.
Identidad y estado
| Miembro | Propósito |
|---|---|
id | Identidad del canal |
level | Nivel asociado |
password | Protección de entrada |
isPersistent | Mantener el canal aunque quede vacío |
isClosed | Bloquear nuevas entradas |
isLocked | Estado de bloqueo del canal |
playerLimit | Límite de jugadores |
jugadores | Participantes actuales |
host | Anfitrión actual |
rfcs | RFC guardadas |
created | Objetos dinámicos persistentes |
destroyed | Objetos dinámicos destruidos |
Entrada
Un canal abierto y con plazas disponibles puede aceptar nuevos jugadores.
if (canal.isOpen)
{
// El canal puede aceptar una entrada.
}El hecho de que un canal exista no implica que un cliente concreto ya haya terminado de entrar en él.
Objetos dinámicos
Eco separa los objetos estáticos de escena de los objetos creados durante el runtime. Los dinámicos necesitan IDs libres dentro del canal y pueden entrar en created cuando se persisten.
Canal
├── Objetos de escena
└── Objetos dinámicos
├── creados
└── destruidosJugadores y ownership
Cuando un jugador abandona un canal, los objetos que posee pueden seguir destinos diferentes según su configuración: destrucción, transferencia o persistencia.
Por eso la salida de un jugador debe tratarse como una operación sobre el estado del canal, no sólo sobre la conexión.
RFC persistentes
rfcs conserva operaciones necesarias para reconstruir estado del canal. El orden es importante: si una RFC guardada se modifica, Eco puede reubicarla para mantener la secuencia de reconstrucción correcta.
Transferencia
La transferencia de un objeto dinámico entre canales cambia su contexto y puede asignarle otro ID. El protocolo debe aceptar durante la transición referencias que todavía utilicen el identificador antiguo.
Sólo objetos dinámicos
Los objetos estáticos de escena no utilizan el mismo mecanismo de transferencia.
Sleep y Wake
Los canales vacíos pueden pasar a un estado de reposo:
Canal activo
↓ último jugador abandona
Sleep()
↓
Estado descargado / serializado
↓ siguiente entrada
Wake()
↓
Canal activoEsto reduce memoria a costa de trabajo adicional cuando el canal vuelve a utilizarse.
API relacionada
Canales
Uso de canales desde cliente y gameplay.
Persistencia
Conservación del estado del canal y sus objetos.
Canal.cs
Implementación actual.
