Workaround for peer-to-peer connection

The end result of matchmaking is a Match - a collection of tickets that satisfy the rules for the queue. For titles with a dedicated server, the match ID is unique, and can be used to identify groups of players that should play together.

In the peer-to-peer case however, the title needs to pass connection information to each other. This tutorial describes a workaround to perform this.

Note

Peer-to-peer connection in matchmaking is currently not officially supported. Consider PlayFab Party, or contact us for more information.

Specify an IP address as an attribute

Similar to Specifying attributes with your tickets, an arbitrary value such as an IP address can be specified as an attribute. It does not need to correspond to a rule.

POST https://{{TitleId}}.playfabapi.com/Match/CreateMatchmakingTicket
{
    "Creator": {
        "Entity": {
            "Id": "A8140AB9109712B",
            "Type": "title_player_account",
            "TypeString": "title_player_account"
        },
        "Attributes": {
            "DataObject": {
                "IP": "123.234.123.12"
            }
        }
    },
    "MembersToMatchWith": [],
    "GiveUpAfterSeconds": 2,
    "QueueName": "IPExampleQueue"
}

Retrieving all player IPs from a Match

When calling GetMatch, specify the flag ReturnMemberAttributes as true to have the attributes of each ticket returned. This will include the specified IP addresses.

{
    "code": 200,
    "status": "OK",
    "data": {
        "MatchId": "3d58dc0f-2eb6-4162-a2e0-1ed6ac5ea551",
        "Members": [
            {
                "TeamId": "",
                "Entity": {
                    "Id": "A8140AB9109712B",
                    "Type": "title_player_account",
                    "TypeString": "title_player_account"
                },
                "Attributes": {
                    "DataObject": {
                        "IP": "123.234.123.12"
                    }
                }
            },
            {
                "TeamId": "",
                "Entity": {
                    "Id": "562D72A5B184F612",
                    "Type": "title_player_account",
                    "TypeString": "title_player_account"
                },
                "Attributes": {
                    "DataObject": {
                        "IP": "123.234.123.12"
                    }
                }
            }
        ]
    }
}

Note

While this can be used to exchange IPs, it does not guarantee connectivity between the clients.