It’s actually a very big system if you want real party matchmaking. But the idea behind it is quiet simple (let see if I can summarize it up a bit):
First of all we will have to handle 2 sessions, you might aleardy noticed that there is a session name in the matchmaking methods, those sessions are normally called Game and Party. So far so god (:D), what we want to achieve in party matchmaking is simple: find a group of people without establishing an unreal connection. This is achieved by using a network beacon system (hence the name Party Beacon). When you search for a party session you will perform a standard matchmaking search got but specifying that you want a Party session (those I mentioned earlier), once you have found one that suits your needs to try to connect to it, but not with a JoinSession call instead you connect your PartyBeaconClient to that session (it will have a different por that the normal game sessions) because the host must have setup a PartyBeaconHost already.
Once you are connected to the PartyHost you are not really connected with an unreal connection to it so any network interaction is done serializing a set of messages that go through those Beacon classes (it’s just a simple socket connection thata all). There are several predefined messages for joining, leaving etc
So whats next? The party host will start a Game search to find a team to play against, again if you find one the host will tell all their connected PartyMembers to connect to found host. This time the idea would be connecting with a real unreal connection and joining the server.
Why do we need all the above? Simple, if we finish the match we are actually connected to a host that might not be our PartyHost and we want to be together again with the players we made the party with. The good thing is that you know what your previous party host was, so when you return to the party lobby everyone knows exactly where to connect to.
One thing that is important here is that we have not discussed the hosting of the beacon/party nor the game session. This is done randomly. If you do not find a party session after X attempts you might use a random chance if you go into hosting mode. The chance should be low and increase overtime. Also if you are hosting and no one joins your session you should just switch to search mode again. That same schema applies also to the part when we start searching/hosting for a game session.
I have left an important part uncovered, invites/friends and splitscreen but you will see how they work together, just take in mind that you have to travel with all players that are connected to you, for example if you send an invite to a friend you could consider yourself the party leader so once you go back to the party lobby only you and your friend will be there.
After writing all this I guess it’s not simple after all xD