Runtime/GameLiftCoreApi.cs (152 lines of code) (raw):
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
#if !UNITY_SERVER
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Amazon;
using Amazon.GameLift;
using AmazonGameLiftPlugin.Core;
using AmazonGameLiftPlugin.Core.ApiGatewayManagement;
using AmazonGameLiftPlugin.Core.ApiGatewayManagement.Models;
using AmazonGameLiftPlugin.Core.CredentialManagement;
using AmazonGameLiftPlugin.Core.CredentialManagement.Models;
using AmazonGameLiftPlugin.Core.Latency;
using AmazonGameLiftPlugin.Core.Latency.Models;
using AmazonGameLiftPlugin.Core.Shared;
using AmazonGameLiftPlugin.Core.Shared.FileSystem;
using AmazonGameLiftPlugin.Core.UserIdentityManagement;
using AmazonGameLiftPlugin.Core.UserIdentityManagement.Models;
namespace AmazonGameLift.Runtime
{
public class GameLiftCoreApi
{
private readonly GameLiftConfiguration _configuration;
private readonly bool _isAnywhereMode;
private readonly IGameServerAdapter _gameServerAdapter;
protected GameLiftCoreApi(GameLiftConfiguration configuration)
{
_configuration = configuration;
if (_configuration.IsGameLiftAnywhere)
{
var fleetId = configuration.FleetId;
var fleetLocation = configuration.FleetLocation;
var credentials = new CredentialsStore(new FileWrapper());
var credentialsResponse =
credentials.RetriveAwsCredentials(new RetriveAwsCredentialsRequest(){ProfileName = configuration.ProfileName});
var region = configuration.AwsRegion;
var gameLiftClient = new AmazonGameLiftClient(credentialsResponse.AccessKey, credentialsResponse.SecretKey, RegionEndpoint.GetBySystemName(region));
var gameLiftClientWrapper = new AmazonGameLiftWrapper(gameLiftClient);
_gameServerAdapter = new AnywhereGameServerAdapter(gameLiftClientWrapper, fleetId, fleetLocation);
_isAnywhereMode = true;
}
else
{
_userIdentity = new UserIdentity(new AmazonCognitoIdentityWrapper(configuration.AwsRegion));
_apiGateway = new ApiGateway(_userIdentity, new JwtTokenExpirationCheck(), new HttpClientWrapper());
_gameServerAdapter = new ApiGateway(_userIdentity, new JwtTokenExpirationCheck(), new HttpClientWrapper());
}
}
#region User Accounts
private readonly IUserIdentity _userIdentity;
public virtual SignUpResponse SignUp(string email, string password)
{
if (_isAnywhereMode)
{
return Response.Ok(new SignUpResponse());
}
var request = new SignUpRequest()
{
ClientId = _configuration.UserPoolClientId,
Username = email,
Password = password,
};
return _userIdentity.SignUp(request);
}
public virtual ConfirmSignUpResponse ConfirmSignUp(string email, string confirmationCode)
{
if (_isAnywhereMode)
{
return Response.Ok(new ConfirmSignUpResponse());
}
var request = new ConfirmSignUpRequest()
{
ClientId = _configuration.UserPoolClientId,
Username = email,
ConfirmationCode = confirmationCode,
};
return _userIdentity.ConfirmSignUp(request);
}
public virtual SignInResponse SignIn(string email, string password)
{
if (_isAnywhereMode)
{
return Response.Ok(new SignInResponse()
{
AccessToken = string.Empty,
IdToken = string.Empty,
RefreshToken = string.Empty,
});
}
var request = new SignInRequest()
{
ClientId = _configuration.UserPoolClientId,
Username = email,
Password = password,
};
return _userIdentity.SignIn(request);
}
public virtual SignOutResponse SignOut(string accessToken)
{
if (_isAnywhereMode)
{
return Response.Ok(new SignOutResponse());
}
var request = new SignOutRequest()
{
AccessToken = accessToken,
};
return _userIdentity.SignOut(request);
}
#endregion
#region Matchmaking
private readonly ApiGateway _apiGateway;
private readonly LatencyService _latencyService = new LatencyService(new PingWrapper());
public virtual string[] ListAvailableRegions()
{
return AwsRegionMapper.AvailableRegions().ToArray();
}
public virtual Task<GetLatenciesResponse> GetLatencies(string[] regions)
{
var request = new GetLatenciesRequest()
{
Regions = regions
};
return _latencyService.GetLatencies(request);
}
public virtual Task<GetGameConnectionResponse> GetGameConnection(string idToken, string refreshToken)
{
var request = new GetGameConnectionRequest()
{
ClientId = _configuration.UserPoolClientId,
ApiGatewayEndpoint = _configuration.ApiGatewayEndpoint,
IdToken = idToken,
RefreshToken = refreshToken,
};
return _gameServerAdapter.GetGameConnection(request);
}
public virtual Task<StartGameResponse> StartGame(string idToken, string refreshToken,
Dictionary<string, long> latencies)
{
var request = new StartGameRequest()
{
ClientId = _configuration.UserPoolClientId,
ApiGatewayEndpoint = _configuration.ApiGatewayEndpoint,
IdToken = idToken,
RefreshToken = refreshToken,
RegionLatencies = latencies
};
return _gameServerAdapter.StartGame(request);
}
#endregion
}
}
#endif