Matchmaking
With the Matchmaking API you are able to create custom game sessions that can be searched by your users based on key-value pairs that you can define.
You can start implementing it by using the following namespace and class.
namespace PretiaArCloud.Multiplayer.Matchmaking
public class Matchmaker
Methods
CreateSessionAsync
Description
Whenever you want to build your own game sessions you can use CreateSessionAsync to accomplish this. The result of this function can be later used to join the session.
public async Task<(SessionInfo, IPEndPoint)> CreateSessionAsync(
string token,
string sessionName,
bool priv,
IDictionary<string, string> labels)
Parameters
string token
Token obtained from GuestLoginAsync.
string sessionName
Name of the session you want to create.
bool priv
Sets whether the created session is private or not.
IDictionary<string, string> labels
key-value pair list of labels that can be used to filter the created session.
GetSessionInfoAsync
Description
You can use GetSessionInfoAsync to find created sessions that match the labels provided as parameter.
public async Task<IEnumerable<SessionInfo>> GetSessionInfoAsync(
string token,
IDictionary<string, string> labelFilters)
Parameters
string token
Token obtained from GuestLoginAsync.
IDictionary<string, string> labels
key-value pair list of labels. If this labels match a create session this will be returned in the list of results.
GetMatchIPAsync
Description
You can obtain the IP:Port pair of a session if you have a SessionInfo.
public async Task<IPEndPoint> GetMatchIPAsync(string token, SessionInfo sessionInfo)
Parameters
string token
Token obtained from GuestLoginAsync.
SessionInfo sessionInfo
SessionInfo object obtained either from CreateSessionAsync or GetSessionInfoAsync
Sample Code
In order to successfuly utilize the Matchmaking API we will need to follow this flow :
- Get a valid token
- Create a new session / find available sessions
- Join session
Step 1 : Get a token
if (await _networkManager.ConnectAsync())
{
string guest = "guestName";
var (statusCode, token, displayName) = await _networkManager.GuestLoginAsync(guest);
if (statusCode == NetworkStatusCode.Success)
{
// Do something with the token from step 2A or 2B
}
}
Step 2A : Create a Game Session using obtained token
var sessionName = "session-name";
var labels = new Dictionary<string, string>();
labels.Add("my-key", "my-value"); // Add a key-value string pair for the session label
var (sessionInfo, ipEndPoint) = Matchmaker.Instance.CreateSessionAsync(token, sessionName, priv: false, labels);
Step 2B : Find available sessions on a different client and get its IP Endpoint
var labels = new Dictionary<string, string>();
labels.Add("my-key", "my-value"); // Add a key-value string pair to match sessions
var sessions = await matchmaker.GetSessionInfoAsync(token, labels); // Returns all available sessions with exact match of labels
var sessionInfo = sessions.FirstOrDefault() // Get the first item in sessions
var ipEndPoint = await Matchmaker.Instance.GetMatchIPAsync(token, sessionInfo); // Get the IP Endpoint of the session
Step 3 : Connect to the game session with its IP Endpoint
var gameSession = await NetworkManager.Instance.CreateGameSessionAsync(ipEndPoint, token);
await gameSession.ConnectSessionAsync();
Further details
This was an illustrative example on how to use the Matchmaking API. For a complete example refer to our sample scene located in /PretiaSDK/Samples/MultiplayerSample/Scenes/MultiplayerScene.