ServidorJuego
Runtime del servidor de Eco para conexiones, canales, jugadores, persistencia y procesamiento de paquetes.
ServidorJuego
ServidorJuego concentra el runtime de una instancia de servidor de partidas. Administra conexiones, jugadores, canales, paquetes, persistencia y extensiones.
Responsabilidades
ServidorJuego
├── Conexiones TCP / UDP
├── Jugadores
├── Canales
├── Paquetes y RFC
├── Persistencia
├── Datos de servidor
├── Archivos
└── ExtensionesEstado y ciclo de vida
servidor.isRunning;
servidor.isMultiThreaded;
servidor.saveFile;
servidor.serverData;El servidor prepara la configuración, escucha conexiones y entra en su ciclo de procesamiento hasta la orden de parada.
Eventos
Los puntos de extensión más importantes incluyen conexión, desconexión, administración y apagado:
servidor.onPlayerConnect += OnConnect;
servidor.onPlayerDisconnect += OnDisconnect;
servidor.onShutdown += OnShutdown;El conjunto exacto de callbacks debe consultarse en ServidorJuego.cs, porque forma parte de la API de runtime y puede evolucionar.
Persistencia
saveFile identifica el almacenamiento utilizado para el estado del servidor. readFunc y writeFunc permiten sustituir el mecanismo de lectura y escritura.
Los canales vacíos pueden utilizar Sleep() y Wake() para descargar o recuperar su representación persistente.
Multihilo
isMultiThreaded permite saber si el runtime utiliza procesamiento concurrente. Existe una configuración SINGLE_THREADED para integraciones que requieren evitar el hilo de red dedicado.
Unity y servidor
No asumas que un callback del servidor puede tocar directamente cualquier API de Unity. El trabajo recibido desde hilos de red debe trasladarse al contexto apropiado antes de manipular objetos de Unity.
Paquetes personalizados
Los paquetes no consumidos por el núcleo pueden procesarse mediante onCustomPacket:
servidor.onCustomPacket = (jugador, buffer, reader, id, fiable) =>
{
// validar origen
// leer Buffer
// ejecutar operación
};La validación del jugador y del canal debe realizarse antes de ejecutar acciones que afecten al estado de la partida.
Datos de servidor
serverData representa el estado global que no pertenece a un canal o jugador concreto. Para datos específicos de una partida utiliza Canal; para datos del participante utiliza Jugador.
Arquitectura
ClienteJuego
│
TCP/UDP/IConnection
↓
ServidorJuego
├── Sesiones
├── Canales
│ ├── Jugadores
│ ├── Objetos
│ └── Estado persistente
└── ProtocoloFuente
ServidorJuego.cs
Implementación actual.
Servidor.cs
Capa de servidor y gestión del runtime.
Servidor en profundidad
Arquitectura interna del servidor.
