using System.Threading.Tasks;
using System.Collections.Generic;
using Unity.Services.Relay.Models;
using Unity.Services.Relay.Http;
using TaskScheduler = Unity.Services.Relay.Scheduler.TaskScheduler;
using Unity.Services.Authentication;
using Unity.Services.Relay.Allocations;
namespace Unity.Services.Relay.Apis.Allocations
{
public interface IAllocationsApiClient
{
///
/// Async Operation.
/// Create Allocation
///
/// Request object for CreateAllocation
/// Task for a Response object containing status code, headers, and AllocateResponseBody object
/// An exception containing the HttpClientResponse with headers, response code, and string of error.
Task> CreateAllocationAsync(CreateAllocationRequest request, Configuration operationConfiguration = null);
///
/// Async Operation.
/// Create Join Code
///
/// Request object for CreateJoincode
/// Task for a Response object containing status code, headers, and JoinCodeResponseBody object
/// An exception containing the HttpClientResponse with headers, response code, and string of error.
Task> CreateJoincodeAsync(CreateJoincodeRequest request, Configuration operationConfiguration = null);
///
/// Async Operation.
/// Join Relay
///
/// Request object for JoinRelay
/// Task for a Response object containing status code, headers, and JoinResponseBody object
/// An exception containing the HttpClientResponse with headers, response code, and string of error.
Task> JoinRelayAsync(JoinRelayRequest request, Configuration operationConfiguration = null);
}
///
public class AllocationsApiClient : BaseApiClient, IAllocationsApiClient
{
private IAccessToken _accessToken;
private Configuration _configuration;
public Configuration Configuration
{
get {
// We return a merge between the current configuration and the
// global configuration to ensure we have the correct
// combination of headers and a base path (if it is set).
return Configuration.MergeConfigurations(_configuration, RelayService.Configuration);
}
}
public AllocationsApiClient(IHttpClient httpClient,
TaskScheduler taskScheduler,
IAccessToken accessToken,
Configuration configuration = null) : base(httpClient, taskScheduler)
{
// We don't need to worry about the configuration being null at
// this stage, we will check this in the accessor.
_configuration = configuration;
_accessToken = accessToken;
}
public async Task> CreateAllocationAsync(CreateAllocationRequest request,
Configuration operationConfiguration = null)
{
var statusCodeToTypeMap = new Dictionary() { { "201", typeof(AllocateResponseBody) },{ "400", typeof(ErrorResponseBody) },{ "401", typeof(ErrorResponseBody) },{ "403", typeof(ErrorResponseBody) },{ "500", typeof(ErrorResponseBody) } };
// Merge the operation/request level configuration with the client level configuration.
var finalConfiguration = Configuration.MergeConfigurations(operationConfiguration, Configuration);
var response = await HttpClient.MakeRequestAsync("POST",
request.ConstructUrl(finalConfiguration.BasePath),
request.ConstructBody(),
request.ConstructHeaders(_accessToken, finalConfiguration),
finalConfiguration.RequestTimeout);
var handledResponse = ResponseHandler.HandleAsyncResponse(response, statusCodeToTypeMap);
return new Response(response, handledResponse);
}
public async Task> CreateJoincodeAsync(CreateJoincodeRequest request,
Configuration operationConfiguration = null)
{
var statusCodeToTypeMap = new Dictionary() { { "200", typeof(JoinCodeResponseBody) },{ "201", typeof(JoinCodeResponseBody) },{ "400", typeof(ErrorResponseBody) },{ "401", typeof(ErrorResponseBody) },{ "403", typeof(ErrorResponseBody) },{ "500", typeof(ErrorResponseBody) } };
// Merge the operation/request level configuration with the client level configuration.
var finalConfiguration = Configuration.MergeConfigurations(operationConfiguration, Configuration);
var response = await HttpClient.MakeRequestAsync("POST",
request.ConstructUrl(finalConfiguration.BasePath),
request.ConstructBody(),
request.ConstructHeaders(_accessToken, finalConfiguration),
finalConfiguration.RequestTimeout);
var handledResponse = ResponseHandler.HandleAsyncResponse(response, statusCodeToTypeMap);
return new Response(response, handledResponse);
}
public async Task> JoinRelayAsync(JoinRelayRequest request,
Configuration operationConfiguration = null)
{
var statusCodeToTypeMap = new Dictionary() { { "200", typeof(JoinResponseBody) },{ "400", typeof(ErrorResponseBody) },{ "401", typeof(ErrorResponseBody) },{ "403", typeof(ErrorResponseBody) },{ "404", typeof(ErrorResponseBody) },{ "500", typeof(ErrorResponseBody) } };
// Merge the operation/request level configuration with the client level configuration.
var finalConfiguration = Configuration.MergeConfigurations(operationConfiguration, Configuration);
var response = await HttpClient.MakeRequestAsync("POST",
request.ConstructUrl(finalConfiguration.BasePath),
request.ConstructBody(),
request.ConstructHeaders(_accessToken, finalConfiguration),
finalConfiguration.RequestTimeout);
var handledResponse = ResponseHandler.HandleAsyncResponse(response, statusCodeToTypeMap);
return new Response(response, handledResponse);
}
}
}