in GameLiftPlugin/Source/GameLiftServer/Source/GameLiftServerSDK/Private/GameLiftServerSDK.cpp [355:408]
FGameLiftStringOutcome FGameLiftServerSDKModule::StartMatchBackfill(const FStartMatchBackfillRequest& request) {
#if WITH_GAMELIFT
Aws::GameLift::Server::Model::StartMatchBackfillRequest sdkRequest;
sdkRequest.SetTicketId(TCHAR_TO_UTF8(*request.m_ticketId));
sdkRequest.SetGameSessionArn(TCHAR_TO_UTF8(*request.m_gameSessionArn));
sdkRequest.SetMatchmakingConfigurationArn(TCHAR_TO_UTF8(*request.m_matchmakingConfigurationArn));
for (auto player : request.m_players) {
Aws::GameLift::Server::Model::Player sdkPlayer;
sdkPlayer.SetPlayerId(TCHAR_TO_UTF8(*player.m_playerId));
sdkPlayer.SetTeam(TCHAR_TO_UTF8(*player.m_team));
for (auto entry : player.m_latencyInMs) {
sdkPlayer.WithLatencyMs(TCHAR_TO_UTF8(*entry.Key), entry.Value);
}
std::map<std::string, Aws::GameLift::Server::Model::AttributeValue> sdkAttributeMap;
for (auto attributeEntry : player.m_playerAttributes) {
FAttributeValue value = attributeEntry.Value;
Aws::GameLift::Server::Model::AttributeValue attribute;
switch (value.m_type)
{
case FAttributeType::STRING:
attribute = Aws::GameLift::Server::Model::AttributeValue(TCHAR_TO_UTF8(*value.m_S));
break;
case FAttributeType::DOUBLE:
attribute = Aws::GameLift::Server::Model::AttributeValue(value.m_N);
break;
case FAttributeType::STRING_LIST:
attribute = Aws::GameLift::Server::Model::AttributeValue::ConstructStringList();
for (auto sl : value.m_SL) {
attribute.AddString(TCHAR_TO_UTF8(*sl));
};
break;
case FAttributeType::STRING_DOUBLE_MAP:
attribute = Aws::GameLift::Server::Model::AttributeValue::ConstructStringDoubleMap();
for (auto sdm : value.m_SDM) {
attribute.AddStringAndDouble(TCHAR_TO_UTF8(*sdm.Key), sdm.Value);
};
break;
}
sdkPlayer.WithPlayerAttribute((TCHAR_TO_UTF8(*attributeEntry.Key)), attribute);
}
sdkRequest.AddPlayer(sdkPlayer);
}
auto outcome = Aws::GameLift::Server::StartMatchBackfill(sdkRequest);
if (outcome.IsSuccess()) {
return FGameLiftStringOutcome(outcome.GetResult().GetTicketId());
}
else {
return FGameLiftStringOutcome(FGameLiftError(outcome.GetError()));
}
#else
return FGameLiftStringOutcome("");
#endif
}