FGameLiftDescribePlayerSessionsOutcome FGameLiftServerSDKModule::DescribePlayerSessions()

in GameLiftPlugin/Source/GameLiftServer/Source/GameLiftServerSDK/Private/GameLiftServerSDK.cpp [182:244]


FGameLiftDescribePlayerSessionsOutcome FGameLiftServerSDKModule::DescribePlayerSessions(const FGameLiftDescribePlayerSessionsRequest &describePlayerSessionsRequest)
{
#if WITH_GAMELIFT
    Aws::GameLift::Server::Model::DescribePlayerSessionsRequest request;
    request.SetGameSessionId(TCHAR_TO_UTF8(*describePlayerSessionsRequest.m_gameSessionId));
    request.SetPlayerId(TCHAR_TO_UTF8(*describePlayerSessionsRequest.m_playerId));
    request.SetPlayerSessionId(TCHAR_TO_UTF8(*describePlayerSessionsRequest.m_playerSessionId));
    request.SetPlayerSessionStatusFilter(TCHAR_TO_UTF8(*describePlayerSessionsRequest.m_playerSessionStatusFilter));
    request.SetLimit(describePlayerSessionsRequest.m_limit);
    request.SetNextToken(TCHAR_TO_UTF8(*describePlayerSessionsRequest.m_nextToken));

    auto outcome = Aws::GameLift::Server::DescribePlayerSessions(request);

    if (outcome.IsSuccess()) {
        auto& outres = outcome.GetResult();
        FGameLiftDescribePlayerSessionsResult result;
  
        int sessionCount = 0;
        auto sessions = outres.GetPlayerSessions(sessionCount);
        if (sessionCount > 0) {
            TArray<FGameLiftPlayerSession> outSessions;
            outSessions.Reserve(sessionCount);

            for (int i = 0; i < sessionCount; ++i) {
                auto session = sessions + i;
                FGameLiftPlayerSession& outSession = outSessions.AddDefaulted_GetRef();

                outSession.m_playerSessionId = UTF8_TO_TCHAR(session->GetPlayerSessionId());
                outSession.m_playerId = UTF8_TO_TCHAR(session->GetPlayerId());
                outSession.m_gameSessionId = UTF8_TO_TCHAR(session->GetGameSessionId());
                outSession.m_fleetId = UTF8_TO_TCHAR(session->GetFleetId());
                outSession.m_creationTime = session->GetCreationTime();
                outSession.m_terminationTime = session->GetTerminationTime();

                switch (session->GetStatus()) {
                    case Aws::GameLift::Server::Model::PlayerSessionStatus::NOT_SET: outSession.m_status = EPlayerSessionStatus::NOT_SET; break;
                    case Aws::GameLift::Server::Model::PlayerSessionStatus::RESERVED: outSession.m_status = EPlayerSessionStatus::RESERVED; break;
                    case Aws::GameLift::Server::Model::PlayerSessionStatus::ACTIVE: outSession.m_status = EPlayerSessionStatus::ACTIVE; break;
                    case Aws::GameLift::Server::Model::PlayerSessionStatus::COMPLETED: outSession.m_status = EPlayerSessionStatus::COMPLETED; break;
                    case Aws::GameLift::Server::Model::PlayerSessionStatus::TIMEDOUT: outSession.m_status = EPlayerSessionStatus::TIMEDOUT; break;
                }

                outSession.m_ipAddress = UTF8_TO_TCHAR(session->GetIpAddress());
                outSession.m_port = session->GetPort();

                outSession.m_playerData = UTF8_TO_TCHAR(session->GetPlayerData());
                outSession.m_dnsName = UTF8_TO_TCHAR(session->GetDnsName());
            }

            result.m_playerSessions = outSessions;
        }

        result.m_nextToken = (UTF8_TO_TCHAR(outres.GetNextToken()));

        return FGameLiftDescribePlayerSessionsOutcome(result);
    }
    else {
        return FGameLiftDescribePlayerSessionsOutcome(FGameLiftError(outcome.GetError()));
    }
#else
    return FGameLiftDescribePlayerSessionsOutcome(FGameLiftDescribePlayerSessionsResult());
#endif
}