Files
2026-03-01 12:16:08 +08:00

75 lines
3.5 KiB
C++

//// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
//// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
//// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
//// PARTICULAR PURPOSE.
////
//// Copyright (c) Microsoft Corporation. All rights reserved
#pragma once
#include <ppltasks.h>
class DQRNetworkManager;
class PartyController
{
public:
PartyController(DQRNetworkManager *pDQRNet);
void SetPartyView( Windows::Xbox::Multiplayer::PartyView^ partyView );
Windows::Xbox::Multiplayer::PartyView^ GetPartyView();
void RefreshPartyView();
bool AddLocalUsersToParty(int userMask, Windows::Xbox::System::User^ primaryUser);
void RemoveLocalUsersFromParty(Windows::Xbox::System::User^ primaryUser);
void RemoveLocalUsersFromParty(Windows::Xbox::System::User^ primaryUser, int playerMask, Microsoft::Xbox::Services::Multiplayer::MultiplayerSessionReference^ sessionReference);
void RemoveLocalUserFromParty(Windows::Xbox::System::User^ userToRemove);
void RegisterEventHandlers();
void UnregisterEventHandlers();
void UnregisterGamePlayersEventHandler();
void RegisterGamePlayersChangedEventHandler();
bool CanJoinParty();
bool CanInvitePartyToMyGame( Microsoft::Xbox::Services::Multiplayer::MultiplayerSession^ multiplayerSession );
bool IsPartyInAnotherTitle();
bool IsGameSessionReadyEventTriggered();
bool DoesPartySessionExist();
Microsoft::Xbox::Services::Multiplayer::MultiplayerSessionReference ^ GetGamePartySessionReference();
void ClearGameSessionReadyEventTriggered();
int GetActiveAndReservedMemberPartySize();
bool DoesPartyAndSessionPlayersMatch(
Microsoft::Xbox::Services::Multiplayer::MultiplayerSession^ session
);
void CheckPartySessionFull(Windows::Xbox::System::User^ primaryUser);
void SetJoinability(bool isJoinable);
void DisassociateSessionFromParty( Microsoft::Xbox::Services::Multiplayer::MultiplayerSessionReference^ sessionReference);
private:
Concurrency::critical_section m_lock;
bool m_isGameSessionReadyEventTriggered;
bool m_isGamePlayerEventRegistered;
DQRNetworkManager *m_pDQRNet;
static void DebugPrintPartyView( Windows::Xbox::Multiplayer::PartyView^ partyView );
void OnPartyStateChanged( Windows::Xbox::Multiplayer::PartyStateChangedEventArgs^ eventArgs );
void OnPartyRosterChanged( Windows::Xbox::Multiplayer::PartyRosterChangedEventArgs^ eventArgs );
void OnGamePlayersChanged( Windows::Xbox::Multiplayer::GamePlayersChangedEventArgs^ eventArgs );
void OnGameSessionReady( Windows::Xbox::Multiplayer::GameSessionReadyEventArgs^ eventArgs );
Windows::Xbox::Multiplayer::PartyView^ m_partyView;
Microsoft::Xbox::Services::Multiplayer::MultiplayerSessionReference^ m_partyGameReadyRef;
void AddAvailableGamePlayers(
Windows::Foundation::Collections::IVectorView<Windows::Xbox::Multiplayer::GamePlayer^>^ availablePlayers,
int& remainingSlots,
Microsoft::Xbox::Services::Multiplayer::MultiplayerSession^ currentSession
);
Windows::Foundation::DateTime GetCurrentTime();
double GetTimeBetweenInSeconds(Windows::Foundation::DateTime dt1, Windows::Foundation::DateTime dt2);
// Party/Session events.
Windows::Foundation::EventRegistrationToken m_partyRosterChangedToken;
Windows::Foundation::EventRegistrationToken m_partyStateChangedToken;
Windows::Foundation::EventRegistrationToken m_partyGamePlayersChangedToken;
Windows::Foundation::EventRegistrationToken m_partyGameSessionReadyToken;
};