using System.Threading.Tasks; using System.Collections.Generic; using Unity.Services.Lobbies.Models; using Unity.Services.Lobbies.Http; using TaskScheduler = Unity.Services.Lobbies.Scheduler.TaskScheduler; using Unity.Services.Authentication; using Unity.Services.Lobbies; namespace Unity.Services.Lobbies.Apis { public interface ILobbyApiClient { /// /// Async Operation. /// Create a lobby /// /// Request object for CreateLobby /// Task for a Response object containing status code, headers, and Lobby object /// An exception containing the HttpClientResponse with headers, response code, and string of error. Task> CreateLobbyAsync(CreateLobbyRequest request, Configuration operationConfiguration = null); /// /// Async Operation. /// Delete a lobby /// /// Request object for DeleteLobby /// Task for a Response object containing status code, headers /// An exception containing the HttpClientResponse with headers, response code, and string of error. Task DeleteLobbyAsync(DeleteLobbyRequest request, Configuration operationConfiguration = null); /// /// Async Operation. /// Get lobby details /// /// Request object for GetLobby /// Task for a Response object containing status code, headers, and Lobby object /// An exception containing the HttpClientResponse with headers, response code, and string of error. Task> GetLobbyAsync(GetLobbyRequest request, Configuration operationConfiguration = null); /// /// Async Operation. /// Join a lobby with lobby code /// /// Request object for JoinLobbyByCode /// Task for a Response object containing status code, headers, and Lobby object /// An exception containing the HttpClientResponse with headers, response code, and string of error. Task> JoinLobbyByCodeAsync(JoinLobbyByCodeRequest request, Configuration operationConfiguration = null); /// /// Async Operation. /// Join a lobby with lobby ID /// /// Request object for JoinLobbyById /// Task for a Response object containing status code, headers, and Lobby object /// An exception containing the HttpClientResponse with headers, response code, and string of error. Task> JoinLobbyByIdAsync(JoinLobbyByIdRequest request, Configuration operationConfiguration = null); /// /// Async Operation. /// Query public lobbies /// /// Request object for QueryLobbies /// Task for a Response object containing status code, headers, and QueryResponse object /// An exception containing the HttpClientResponse with headers, response code, and string of error. Task> QueryLobbiesAsync(QueryLobbiesRequest request, Configuration operationConfiguration = null); /// /// Async Operation. /// Query available lobbies and join a random one /// /// Request object for QuickJoinLobby /// Task for a Response object containing status code, headers, and Lobby object /// An exception containing the HttpClientResponse with headers, response code, and string of error. Task> QuickJoinLobbyAsync(QuickJoinLobbyRequest request, Configuration operationConfiguration = null); /// /// Async Operation. /// Remove a player /// /// Request object for RemovePlayer /// Task for a Response object containing status code, headers /// An exception containing the HttpClientResponse with headers, response code, and string of error. Task RemovePlayerAsync(RemovePlayerRequest request, Configuration operationConfiguration = null); /// /// Async Operation. /// Update lobby data /// /// Request object for UpdateLobby /// Task for a Response object containing status code, headers, and Lobby object /// An exception containing the HttpClientResponse with headers, response code, and string of error. Task> UpdateLobbyAsync(UpdateLobbyRequest request, Configuration operationConfiguration = null); /// /// Async Operation. /// Update player data /// /// Request object for UpdatePlayer /// Task for a Response object containing status code, headers, and Lobby object /// An exception containing the HttpClientResponse with headers, response code, and string of error. Task> UpdatePlayerAsync(UpdatePlayerRequest request, Configuration operationConfiguration = null); } /// public class LobbyApiClient : BaseApiClient, ILobbyApiClient { 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, LobbyService.Configuration); } } public LobbyApiClient(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> CreateLobbyAsync(CreateLobbyRequest request, Configuration operationConfiguration = null) { var statusCodeToTypeMap = new Dictionary() { { "201", typeof(Lobby) },{ "400", typeof(ErrorStatus) },{ "403", typeof(ErrorStatus) } }; // 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 DeleteLobbyAsync(DeleteLobbyRequest request, Configuration operationConfiguration = null) { var statusCodeToTypeMap = new Dictionary() { { "204", null },{ "400", typeof(ErrorStatus) },{ "403", typeof(ErrorStatus) },{ "404", typeof(ErrorStatus) } }; // Merge the operation/request level configuration with the client level configuration. var finalConfiguration = Configuration.MergeConfigurations(operationConfiguration, Configuration); var response = await HttpClient.MakeRequestAsync("DELETE", request.ConstructUrl(finalConfiguration.BasePath), request.ConstructBody(), request.ConstructHeaders(_accessToken, finalConfiguration), finalConfiguration.RequestTimeout); ResponseHandler.HandleAsyncResponse(response, statusCodeToTypeMap); return new Response(response); } public async Task> GetLobbyAsync(GetLobbyRequest request, Configuration operationConfiguration = null) { var statusCodeToTypeMap = new Dictionary() { { "200", typeof(Lobby) },{ "403", typeof(ErrorStatus) },{ "404", typeof(ErrorStatus) } }; // Merge the operation/request level configuration with the client level configuration. var finalConfiguration = Configuration.MergeConfigurations(operationConfiguration, Configuration); var response = await HttpClient.MakeRequestAsync("GET", 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> JoinLobbyByCodeAsync(JoinLobbyByCodeRequest request, Configuration operationConfiguration = null) { var statusCodeToTypeMap = new Dictionary() { { "200", typeof(Lobby) },{ "400", typeof(ErrorStatus) },{ "403", typeof(ErrorStatus) },{ "409", typeof(ErrorStatus) } }; // 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> JoinLobbyByIdAsync(JoinLobbyByIdRequest request, Configuration operationConfiguration = null) { var statusCodeToTypeMap = new Dictionary() { { "200", typeof(Lobby) },{ "400", typeof(ErrorStatus) },{ "403", typeof(ErrorStatus) },{ "404", typeof(ErrorStatus) },{ "409", typeof(ErrorStatus) } }; // 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> QueryLobbiesAsync(QueryLobbiesRequest request, Configuration operationConfiguration = null) { var statusCodeToTypeMap = new Dictionary() { { "200", typeof(QueryResponse) },{ "400", typeof(ErrorStatus) },{ "403", typeof(ErrorStatus) } }; // 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> QuickJoinLobbyAsync(QuickJoinLobbyRequest request, Configuration operationConfiguration = null) { var statusCodeToTypeMap = new Dictionary() { { "200", typeof(Lobby) },{ "400", typeof(ErrorStatus) },{ "403", typeof(ErrorStatus) },{ "404", typeof(ErrorStatus) },{ "409", typeof(ErrorStatus) } }; // 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 RemovePlayerAsync(RemovePlayerRequest request, Configuration operationConfiguration = null) { var statusCodeToTypeMap = new Dictionary() { { "204", null },{ "400", typeof(ErrorStatus) },{ "403", typeof(ErrorStatus) },{ "404", typeof(ErrorStatus) } }; // Merge the operation/request level configuration with the client level configuration. var finalConfiguration = Configuration.MergeConfigurations(operationConfiguration, Configuration); var response = await HttpClient.MakeRequestAsync("DELETE", request.ConstructUrl(finalConfiguration.BasePath), request.ConstructBody(), request.ConstructHeaders(_accessToken, finalConfiguration), finalConfiguration.RequestTimeout); ResponseHandler.HandleAsyncResponse(response, statusCodeToTypeMap); return new Response(response); } public async Task> UpdateLobbyAsync(UpdateLobbyRequest request, Configuration operationConfiguration = null) { var statusCodeToTypeMap = new Dictionary() { { "200", typeof(Lobby) },{ "400", typeof(ErrorStatus) },{ "403", typeof(ErrorStatus) },{ "404", typeof(ErrorStatus) } }; // 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> UpdatePlayerAsync(UpdatePlayerRequest request, Configuration operationConfiguration = null) { var statusCodeToTypeMap = new Dictionary() { { "200", typeof(Lobby) },{ "400", typeof(ErrorStatus) },{ "403", typeof(ErrorStatus) },{ "404", typeof(ErrorStatus) } }; // 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); } } }