How does a client get an exact PlayerSessionId for a group matchmaking?

Hi everyone

I’m working on the group matchmaking
feature. I am experiencing a problem where clients are not receiving the
correct PlayerSessionIds. For instance, a group of 4 clients request their
matchmaking with the same TicketId generated by a group leader through FlexMatch.
After doing that, they have to track the status of the TicketId that they have,
to check that they are matched through FlexMatch by calling
describe_matchmaking() (I’m currently using Polling to check the status of the
TicketId). Then, every client receives the same PlayerSessionId (and by
examining the Username, we can see that it’s the PlayerSessionId for one
specific client, not the PlayerSessionId for the intended client. For
example, players A, B, C, and D all receive the PlayerSessionId and username
for client C). So only one of the PlayerSessionIds is accepted by the Dedicated
Server within the Fleet. So, FlexMatch ultimately allows only one user to join
the dedicated server even though all users attempt to join the dedicated
server.

(E is Monter and B is Human. A matchmaking rule is bottom, Actually if a PlayerSessionId is not accepted within about 1 minute, status of it will be TIMED_OUT but a dedicated server already removed it. So the status is “Completed”.)

So finally 4 users as Humans connect to a dedicated server with the same PlayerSessionId and then, the dedicated server called AcceptPlayerSession() with the same PlayerSessionId. So only one human is able to be accepted in Matchmaker. A problem is that backfilling is affected by the information.

My start_matchmaking() script looks like
this:

Please note that our PlayerId’s are
hardcoded (eg. A) because we are not finished implementing some of the game
code. Our game specifically uses those names at the moment.

match_response = gl_client.start_matchmaking(ConfigurationName=[MATCHMAKING_CONFIGURATION_NAME],Players=[{"PlayerId": "A","PlayerAttributes": firstPlayerAttr }, {"PlayerId": "B", "PlayerAttributes": secondPlayerAttr}, {"PlayerId": "C", "PlayerAttributes": thirdPlayerAttr}, {"PlayerId": "D", "PlayerAttributes": thirdPlayerAttr} ], TicketId= ticketIdForParty )

The text below, shows the matchmaking
rule set that I am using. (however, I changed some “name” fields to
protect our product):

	{
"ruleLanguageVersion" : "1.0",
"playerAttributes" :
[
{
"name" : "score",
"type" : "number",
"default" : 1000
},
{
"name" : "WantsToBe",
"type" : "number",
"default" : 0
}
],
"teams" :
[
{
"name" : "players",
"maxPlayers" : 4,
"minPlayers" : 4
},
{
"name" : "monster",
"maxPlayers" : 1,
"minPlayers" : 1
},
{
"name" : "spectatorsForPlayers",
"maxPlayers" : 5,
"minPlayers" : 0
}
],
"rules":
[
{
"name" : "PlayersSelection",
"description" : "Do not place people who want to be monsters in the players team",
"type": "comparison",
"measurements" : ["teams[players].players.attributes[WantsToBe]"],
"referenceValue" : 1,
"operation" : "="
},
{
"name" : "MonsterSelection",
"description" : "Only users that request playing as monster are assigned to the monster team",
"type": "comparison",
"measurements" : ["teams[monster].players.attributes[WantsToBe]"],
"referenceValue" : 2,
"operation" : "="
},
{
"name" : "spectatorsForPlayersSelection",
"type": "comparison",
"measurements" : ["teams[spectatorsForPlayers].players.attributes[WantsToBe]"],
"referenceValue" : 3,
"operation" : "="
}
]
}

Any
hints as to how to figure out why this is happening?

I found out more PlayerSessionId information in return value of describe_matchmaking().

8753-screenshot100.png

So I got all PlayerSessionIds of party members.