> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Información general sobre Multiplayer Manager

> Información general sobre Multiplayer Manager, la API de alto nivel de XBOX Live que simplifica la administración de sesiones de MPSD, el emparejamiento de SmartMatch, las invitaciones y la unión a partidas en curso.

Este tema describe la API de alto nivel para agregar funcionalidad multijugador mediante la administración de sesiones, emparejamiento e invitaciones de juego. La API proporciona un modelo de programación basado en estados y basado en eventos.

Los servicios XBOX proporcionan amplia compatibilidad para agregar funcionalidad multijugador a tus títulos, de modo que tu juego pueda conectar a miembros de XBOX de todo el mundo.
Esto incluye escenarios de emparejamiento avanzados, la capacidad de que un jugador se una al juego en curso de un amigo y mucho más.

Implementar el multijugador de los servicios XBOX mediante las API de multijugador directamente puede ser una tarea compleja. Requiere un gran esfuerzo de diseño y pruebas para verificar que sigues las prácticas recomendadas y cumples los requisitos de certificación.

Multiplayer Manager facilita agregar funcionalidad multijugador a tu juego mediante la administración de sesiones y del emparejamiento, y proporciona un modelo de programación basado en estados y basado en eventos.

Multiplayer Manager es un conjunto de API. Están diseñadas para facilitar la implementación de escenarios multijugador en juegos de los servicios XBOX con diseños multijugador hospedados entre pares.

Multiplayer Manager proporciona una API centrada en escenarios multijugador comunes, como jugar juegos multijugador con amigos, controlar invitaciones de juego, controlar la unión a partidas en curso, el emparejamiento y mucho más.

Multiplayer Manager admite varios usuarios locales. También facilita que tu título se integre con el Directorio de sesiones multijugador (MPSD) si usas un servicio de emparejamiento de terceros. Muchos de estos escenarios pueden lograrse con solo unas pocas llamadas a la API.

## 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

A continuación se muestra información importante sobre el diseño de la API de Multiplayer Manager.

* 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](/services/xbox-services/multiplayer/mpa/live-mpa-overview) o las [API del servicio multijugador](/services/xbox-services/multiplayer/mpsd/live-mpsd-overview) y las [llamadas de servicio a servicio (tema con NDA)](/services/xbox-services/fundamentals/s2s-auth-calls/s2s-calls/live-title-service-calls-xbox-live).

<Info>Para superar la certificación, tu juego debe seguir implementando los eventos necesarios para el multijugador en línea.</Info>

## 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](/reference/live/xsapi-c/multiplayer_manager_c/functions/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](/reference/live/xsapi-c/multiplayer_manager_c/structs/xblmultiplayermanagermember): representa a un usuario individual que ha iniciado sesión en un dispositivo local o remoto.

* [XblMultiplayerManagerDoWork](/reference/live/xsapi-c/multiplayer_manager_c/functions/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](/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerdowork) con frecuencia, por ejemplo, una vez por fotograma.

  [XblMultiplayerManagerDoWork](/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerdowork) te proporciona una matriz de eventos de devolución de llamada [XblMultiplayerEvent](/reference/live/xsapi-c/multiplayer_manager_c/structs/xblmultiplayerevent) para que el juego los controle.

## Máquina de estados

La llamada a [XblMultiplayerManagerDoWork](/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerdowork) es necesaria para garantizar que tu estado se mantenga actualizado.
Para que Multiplayer Manager haga su trabajo, debes llamar al método [XblMultiplayerManagerDoWork](/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerdowork) con regularidad.
La manera más fiable de hacerlo es llamarlo al menos una vez por fotograma.

[XblMultiplayerManagerDoWork](/reference/live/xsapi-c/multiplayer_manager_c/functions/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](/reference/live/xsapi-c/multiplayer_manager_c/functions/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](/reference/live/xsapi-c/multiplayer_manager_c/functions/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](/reference/live/xsapi-c/multiplayer_manager_c/functions/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](/reference/live/xsapi-c/multiplayer_manager_c/structs/xblmultiplayerevent)) y notifica al título mediante el método [XblMultiplayerManagerDoWork](/reference/live/xsapi-c/multiplayer_manager_c/functions/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](/reference/live/xsapi-c/multiplayer_manager_c/functions/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](/reference/live/xsapi-c/multiplayer_manager_c/structs/xblmultiplayerevent).

Cada [XblMultiplayerEvent](/reference/live/xsapi-c/multiplayer_manager_c/structs/xblmultiplayerevent) devuelto incluye un `EventArgsHandle`, que debes usar para obtener los `args` adecuados para el tipo de evento.
Por ejemplo, si el [XblMultiplayerEventType](/reference/live/xsapi-c/multiplayer_manager_c/enums/xblmultiplayereventtype) es `MemberJoined`, podrías llamar a [XblMultiplayerEventArgsMembersCount](/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayereventargsmemberscount) y a [XblMultiplayerEventArgsMembers](/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayereventargsmembers).

El siguiente ejemplo muestra el uso de [XblMultiplayerManagerDoWork](/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerdowork) para controlar eventos.

#### API de C plana

```cpp theme={null}
size_t eventCount{ 0 };
const XblMultiplayerEvent* events{ nullptr };
HRESULT hr = XblMultiplayerManagerDoWork(&events, &eventCount);
if (FAILED(hr))
{
    // Handle failure.
}

for (auto i = 0u; i < eventCount; ++i)
{
    switch (events[i].EventType)
    {
        case XblMultiplayerEventType::MemberJoined:
        {
            // Handle MemberJoined.
            size_t memberCount = 0;
            hr = XblMultiplayerEventArgsMembersCount(events[i].EventArgsHandle, &memberCount);
            assert(SUCCEEDED(hr));

            std::vector<XblMultiplayerManagerMember> members(memberCount);
            hr = XblMultiplayerEventArgsMembers(events[i].EventArgsHandle, memberCount, members.data());
            assert(SUCCEEDED(hr));
            ...

            break;
        }

        case XblMultiplayerEventType::SessionPropertyChanged:
        {
            // Handle SessionPropertyChanged.
            const char* changedProperty{ nullptr };
            hr = XblMultiplayerEventArgsPropertiesJson(events[i].EventArgsHandle, &changedProperty);
            assert(SUCCEEDED(hr));
            ...

            break;
        }
        ...
    }
}
```

Para obtener más información, consulta lo siguiente:

* [XblMultiplayerEvent](/reference/live/xsapi-c/multiplayer_manager_c/structs/xblmultiplayerevent)
* [XblMultiplayerEventArgsMembers](/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayereventargsmembers)
* [XblMultiplayerEventArgsMembersCount](/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayereventargsmemberscount)
* [XblMultiplayerEventArgsPropertiesJson](/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayereventargspropertiesjson)
* [XblMultiplayerEventType](/reference/live/xsapi-c/multiplayer_manager_c/enums/xblmultiplayereventtype)
* [XblMultiplayerManagerDoWork](/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerdowork)
* [XblMultiplayerManagerMember](/reference/live/xsapi-c/multiplayer_manager_c/structs/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](/services/xbox-services/multiplayer/mpm/how-to/live-play-multiplayer-with-friends)
* [Buscar un juego multijugador mediante SmartMatch con Multiplayer Manager](/services/xbox-services/multiplayer/mpm/how-to/live-play-multiplayer-with-matchmaking)
* [Enviar invitaciones de juego mediante Multiplayer Manager](/services/xbox-services/multiplayer/mpm/how-to/live-send-game-invites)
* [Controlar la activación de protocolo para iniciar un juego mediante Multiplayer Manager](/services/xbox-services/multiplayer/mpm/how-to/live-handle-protocol-activation)

Para obtener una información general de alto nivel sobre la API, consulta [Información general sobre la API de Multiplayer Manager](/services/xbox-services/multiplayer/mpm/concepts/live-multiplayer-manager-api-overview).

## 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](/services/xbox-services/develop/best-practices/live-fine-grained-rate-limiting)
* Mezcla de las API del servicio multijugador y las API de Multiplayer Manager

<Note>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.</Note>

## Recursos

Para ver un ejemplo funcional de la API, consulta el [ejemplo NetRumble](https://aka.ms/gdkdl).

Para consultar la documentación de la API, consulta [multiplayer\_manager\_c](/reference/live/xsapi-c/multiplayer_manager_c/multiplayer_manager_c_members).
También puedes ver el archivo de encabezado `multiplayer_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](https://forums.xboxlive.com).


## Related topics

- [Información general sobre el multijugador de los servicios de XBOX](/es/services/xbox-services/multiplayer/overviews/live-multiplayer-intro.md)
- [Multiplayer Manager (MPM)](/es/services/xbox-services/multiplayer/mpm/live-multiplayer-manager-nav.md)
- [Información general sobre la API de Multiplayer Manager](/es/services/xbox-services/multiplayer/mpm/concepts/live-multiplayer-manager-api-overview.md)
- [Información general sobre los servicios XBOX](/es/services/xbox-services/fundamentals/live-xbl-overview.md)
- [Información general sobre la API XBOX Achievements Manager](/es/services/xbox-services/player-data/achievements/achievements-manager/live-achievements-manager-overview.md)
