public async Task GetConnectionInfo()

in Samples~/SampleGame/Assets/Scripts/Client/GameLiftClient.cs [42:87]


    public async Task<(bool success, ConnectionInfo connectionInfo)> GetConnectionInfo(CancellationToken cancellationToken = default)
    {
        string ip = null;
        int port = -1;
        string playerSessionId = null;

        GetLatenciesResponse latenciesResponse = await Core.GetLatencies(Core.ListAvailableRegions());
        StartGameResponse startGameResponse = await Core.StartGame(ClientCredentials.IdToken, ClientCredentials.RefreshToken, latenciesResponse.RegionLatencies);

        if (!startGameResponse.Success && startGameResponse.ErrorCode != ErrorCode.ConflictError)
        {
            return (success: false, new ConnectionInfo { IpAddress = ip, Port = port, PlayerSessionId = playerSessionId });
        }

        _clientCredentials.IdToken = startGameResponse.IdToken;
        await _delay.Wait(InitialConnectionDelayMs, cancellationToken);
        int retry = 0;
        int delay = ConnectionRetryDelayMs;

        while (retry < MaxConnectionRetryCount && !cancellationToken.IsCancellationRequested)
        {
            GetGameConnectionResponse connection = await Core.GetGameConnection(ClientCredentials.IdToken, ClientCredentials.RefreshToken);

            if (!connection.Success)
            {
                return (success: false, new ConnectionInfo { IpAddress = ip, Port = port, PlayerSessionId = playerSessionId });
            }

            _clientCredentials.IdToken = connection.IdToken;

            if (connection.Ready)
            {
                ip = connection.DnsName ?? connection.IpAddress;
                port = int.Parse(connection.Port);
                playerSessionId = connection.PlayerSessionId;
                return (success: true, new ConnectionInfo { IpAddress = ip, Port = port, PlayerSessionId = playerSessionId });
            }

            await _delay.Wait(delay, cancellationToken);
            retry++;
            delay *= 2;
        }

        cancellationToken.ThrowIfCancellationRequested();
        return (success: false, new ConnectionInfo { IpAddress = ip, Port = port, PlayerSessionId = playerSessionId });
    }