Características principales
Las características principales de la API de Multiplayer Manager son las siguientes.- Administración de sesiones y emparejamiento de los servicios XBOX sencillos
- Modelo de programación basado en estados y basado en eventos
- Garantiza las prácticas recomendadas de los servicios XBOX y el cumplimiento de los XR de multijugador
- Implementa los diagramas de flujo de multijugador de 2015
- No se admiten las sesiones grandes de MPSD (más de 100 miembros).
- Está destinada únicamente a diseños multijugador hospedados entre pares. Los títulos con servidores dedicados deben usar en su lugar el Servicio de actividad multijugador o las API del servicio multijugador y las llamadas de servicio a servicio (tema con NDA).
Para superar la certificación, tu juego debe seguir implementando los eventos necesarios para el multijugador en línea.
Información general
Multiplayer Manager se centra en los siguientes conceptos clave.- Sesión de sala: una sesión persistente que se usa para administrar a los usuarios locales del dispositivo y a los amigos invitados que quieren jugar juntos. El grupo puede jugar al juego; por ejemplo, varias rondas, mapas y niveles. La sesión de sala hace un seguimiento de este grupo principal de amigos (incluidos los jugadores locales del dispositivo). Normalmente, este grupo se forma mientras el host puede estar navegando por los menús y charlando con los miembros del grupo para decidir a qué modo de juego quieren jugar.
- Sesión de juego: hace un seguimiento de los jugadores que están jugando una instancia específica del juego. Por ejemplo, una carrera, un mapa o un nivel. Puedes crear una nueva sesión de juego mediante XblMultiplayerManagerJoinGameFromLobby que incluya a los miembros de la sesión de sala. Cuando un miembro acepta una invitación, se agrega a la sala y a la sesión de juego (si hay espacio). Se pueden agregar jugadores adicionales a la sesión de juego si el emparejamiento está habilitado, pero esos jugadores adicionales no se agregan a la sesión de sala. Esto significa que, cuando el juego termina, los jugadores de la sesión de sala siguen juntos, mientras que los jugadores adicionales procedentes del emparejamiento no.
- XblMultiplayerManagerMember: representa a un usuario individual que ha iniciado sesión en un dispositivo local o remoto.
- XblMultiplayerManagerDoWork: garantiza que se mantengan las actualizaciones correctas del estado del juego entre el título y el servicio multijugador de los servicios XBOX. Para garantizar el mejor rendimiento, se debe llamar a XblMultiplayerManagerDoWork con frecuencia, por ejemplo, una vez por fotograma. XblMultiplayerManagerDoWork te proporciona una matriz de eventos de devolución de llamada XblMultiplayerEvent para que el juego los controle.
Máquina de estados
La llamada a XblMultiplayerManagerDoWork es necesaria para garantizar que tu estado se mantenga actualizado. Para que Multiplayer Manager haga su trabajo, debes llamar al método XblMultiplayerManagerDoWork con regularidad. La manera más fiable de hacerlo es llamarlo al menos una vez por fotograma. XblMultiplayerManagerDoWork se devuelve rápidamente cuando no tiene trabajo que hacer, por lo que no hay motivo para preocuparse por llamarlo con demasiada frecuencia.Subprocesos
Ningún objeto devuelto por la API de Multiplayer Manager debe considerarse seguro para subprocesos. Sin embargo, te da control para realizar la sincronización de subprocesos si lo llamas desde varios subprocesos. La biblioteca tiene protección interna de multithreading. Sin embargo, sigues teniendo que implementar tu propio bloqueo si necesitas que un subproceso acceda a algún valor; por ejemplo, recorrer la lista de miembros mientras otro subproceso podría estar invocando XblMultiplayerManagerDoWork.Actualización del modelo basado en estados
Multiplayer Manager mantiene un modelo basado en estados que actualiza las sesiones en segundo plano a medida que los jugadores se unen, se van o cuando se actualizan las sesiones. Para ayudar a evitar problemas de sincronización de subprocesos entre el subproceso de la interfaz de usuario y el subproceso del juego, Multiplayer Manager no actualiza el estado de las sesiones visible para la aplicación hasta que llamas al método XblMultiplayerManagerDoWork. Tradicionalmente, recibirías notificaciones sobre eventos, como cambios de sesión, en un subproceso en segundo plano y, después, tendrías que sincronizarlo con un subproceso de la interfaz de usuario para mostrar estos cambios. Con Multiplayer Manager, este trabajo entre bastidores se hace por ti. Puedes llamar a XblMultiplayerManagerDoWork en tu subproceso principal en el momento que elijas para obtener la instantánea más reciente del estado que Multiplayer Manager está almacenando en búfer por ti entre bastidores.Eventos y notificaciones
Multiplayer Manager define un conjunto de eventos significativos (consulta XblMultiplayerEvent) y notifica al título mediante el método XblMultiplayerManagerDoWork cuando se producen. Por ejemplo, los eventos incluyen que jugadores remotos se unan o se vayan, que cambien las propiedades de los miembros o que cambie el estado de la sesión. Todas las API de Multiplayer Manager son asincrónicas. El método XblMultiplayerManagerDoWork devuelve una lista de eventos cuando se completan estas operaciones asincrónicas. Tu título debe controlar estos eventos según corresponda a tu situación. Para obtener más detalles, consulta la documentación de la clase XblMultiplayerEvent. Cada XblMultiplayerEvent devuelto incluye unEventArgsHandle, que debes usar para obtener los args adecuados para el tipo de evento.
Por ejemplo, si el XblMultiplayerEventType es MemberJoined, podrías llamar a XblMultiplayerEventArgsMembersCount y a XblMultiplayerEventArgsMembers.
El siguiente ejemplo muestra el uso de XblMultiplayerManagerDoWork para controlar eventos.
API de C plana
- XblMultiplayerEvent
- XblMultiplayerEventArgsMembers
- XblMultiplayerEventArgsMembersCount
- XblMultiplayerEventArgsPropertiesJson
- XblMultiplayerEventType
- XblMultiplayerManagerDoWork
- XblMultiplayerManagerMember
Escenarios
Esta sección cubre escenarios comunes y las API a las que llamarías en cada escenario. También se proporciona información sobre lo que Multiplayer Manager hace entre bastidores.- Habilitar el juego multijugador con amigos mediante Multiplayer Manager
- Buscar un juego multijugador mediante SmartMatch con Multiplayer Manager
- Enviar invitaciones de juego mediante Multiplayer Manager
- Controlar la activación de protocolo para iniciar un juego mediante Multiplayer Manager
Qué no hace Multiplayer Manager
Multiplayer Manager facilita mucho la implementación de escenarios multijugador y abstrae parte de los datos por ti. Sin embargo, Multiplayer Manager no controla lo siguiente:- Juegos de servidor en línea persistentes, como los juegos multijugador masivos en línea (MMO) u otros tipos de juegos que requieren sesiones grandes (más de 100 jugadores en una sesión)
- Administración de sesiones de servidor a servidor
- Limitación de las llamadas a MPSD para cumplir la limitación de velocidad detallada
- Mezcla de las API del servicio multijugador y las API de Multiplayer Manager
Multiplayer Manager no está restringido a ninguna tecnología de red específica y debería funcionar con cualquier capa de comunicación de red.
Recursos
Para ver un ejemplo funcional de la API, consulta el ejemplo NetRumble. Para consultar la documentación de la API, consulta multiplayer_manager_c. También puedes ver el archivo de encabezadomultiplayer_manager_c.h.
Si tienes preguntas, comentarios o problemas al usar Multiplayer Manager, ponte en contacto con tu administrador de cuentas de desarrollador (DAM) o publica un hilo de soporte en los foros en https://forums.xboxlive.com.