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 });
}