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

# 使用多人遊戲管理員處理通訊協定啟用

> 當玩家接受遊戲邀請或從玩家卡片加入時，使用 XBOX 多人遊戲管理員處理通訊協定啟用，包括處理大廳加入。

本主題說明如何使用多人遊戲管理員處理通訊協定啟用。

*啟用*是指系統為了回應另一個動作而自動啟動遊戲。這通常發生在玩家接受其他玩家的遊戲邀請時。

您的遊戲可能會以下列方式被通訊協定啟用。

* 使用者接受遊戲邀請
* 使用者從玩家的玩家卡片中選取「Join Game」

此案例涵蓋在您的遊戲啟動、玩家加入大廳，以及遊戲正在進行中 (如果有的話) 時，如何處理通訊協定啟用。

如需通訊協定啟用程序的流程圖，請參閱[處理通訊協定啟用 (流程圖)](/zh-TW/services/xbox-services/multiplayer/mpm/concepts/flowcharts/live-mpm-on-protocol-activation)。

當玩家接受遊戲邀請，或透過玩家卡片加入好友的遊戲時，系統會使用通訊協定啟用在其裝置上啟動遊戲。
遊戲啟動後，請使用 [XGameActivationRegisterForEvent](/zh-TW/reference/system/xgameactivation/functions/xgameactivationregisterforevent) 取得邀請控制代碼。使用該邀請控制代碼呼叫 [XblMultiplayerManagerJoinLobby](/zh-TW/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerjoinlobby)。

如果受邀使用者未透過 [XblMultiplayerManagerLobbySessionAddLocalUser](/zh-TW/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerlobbysessionaddlocaluser) 新增，[XblMultiplayerManagerJoinLobby](/zh-TW/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerjoinlobby) 會失敗，而您可以搭配 `JoinLobbyCompleted` 事件呼叫 [XblMultiplayerEventArgsXuid](/zh-TW/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayereventargsxuid)，以取得邀請所傳送給的 xuid。

加入大廳之後，建議您設定本機成員的連線位址，以及該成員的任何自訂屬性。
如果主機不存在，您也可以透過 [XblMultiplayerManagerLobbySessionSetSynchronizedHost](/zh-TW/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerlobbysessionsetsynchronizedhost) 設定主機。

最後，如果遊戲已在進行中且仍有空間容納受邀者，多人遊戲管理員會自動讓使用者加入遊戲工作階段。
遊戲會透過 `JoinGameCompleted` 事件收到通知，並提供適當的錯誤碼和訊息。

#### 平面 C API

```cpp theme={null}
#include <XTaskQueue.h>
#include <XGameActivation.h>  
  
XTaskQueueHandle g_taskQueue;  
XTaskQueueRegistrationToken g_activationToken;  
  
void CALLBACK OnActivation(void* context, const XGameActivationInfo* activationInfo)  
{  
    if (activationInfo->type == XGameActivationType::AcceptedGameInvite)
    {
        if (activationInfo->inviteUri != nullptr)
        {
            std::string inviteString(activationInfo->inviteUri);
            auto pos = inviteString.find("handle=");
            auto inviteHandeId = inviteString.substr(pos + 7, 36);
            // Now, call XblMultiplayerManagerJoinLobby.
        }
    }
}  
  
void InitializeGame()  
{  
    XGameActivationRegisterForEvent(g_taskQueue, nullptr, OnActivation, &g_activationToken);  
}  
  
void ShutdownGame()  
{  
    XGameActivationUnregisterForEvent(g_activationToken, true);  
}  
```

```cpp theme={null}
HRESULT hr = XblMultiplayerManagerLobbySessionSetLocalMemberConnectionAddress(
    xblUserHandle, connectionAddress, context);
```

如需詳細資訊，請參閱 [XblMultiplayerManagerLobbySessionSetLocalMemberConnectionAddress](/zh-TW/reference/live/xsapi-c/multiplayer_manager_c/functions/xblmultiplayermanagerlobbysessionsetlocalmemberconnectionaddress)。

多人遊戲管理員會執行下列功能。

* 註冊即時活動和多人遊戲訂閱。
* 加入大廳工作階段。
* 清除現有的大廳狀態。
* 讓所有本機玩家以作用中狀態加入。
* 上傳安全裝置位址 (SDA)。
* 設定成員屬性。
* 註冊工作階段變更事件。
* 將大廳工作階段設定為作用中工作階段。
* 加入遊戲工作階段 (如果存在)。
* 使用轉移控制代碼。


## Related topics

- [多人遊戲管理員範例程式碼](/zh-TW/services/xbox-services/multiplayer/mpm/how-to/live-mm-howto-nav.md)
- [操作說明](/zh-TW/services/xbox-services/multiplayer/mpm/how-to/index.md)
- [多人遊戲管理員概觀](/zh-TW/services/xbox-services/multiplayer/mpm/live-multiplayer-manager-overview.md)
- [接收邀請](/zh-TW/services/xbox-services/multiplayer/invites/how-to/live-invites-receive.md)
- [傳送邀請](/zh-TW/services/xbox-services/multiplayer/invites/how-to/live-invites-send.md)
