using SharedLibrary.Models; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; namespace RepositoryLibrary { public class HostedRepository : IRepository { private readonly string _backendUrl; public static ConcurrentBag ApiClient = new ConcurrentBag(); public HostedRepository() { _backendUrl = "http://localhost:56143"; } public async Task Lookup() { return await GetAsync(); } private async Task GetAsync([CallerMemberName] string request = "") { string uri = GetUriString(request); var client = GetHttpClient(); using (var response = await client.GetAsync(uri)) { ReturnHttpClient(client); if (response.IsSuccessStatusCode) { var model = await response.Content.ReadAsAsync(); if (model != null) { return model; } } var err = await response.Content.ReadAsAsync(); if (err != null) { throw new Exception(err.Information); } var str = await response.Content.ReadAsStringAsync(); throw new Exception(str); } } private HttpClient GetHttpClient() { if (!ApiClient.TryTake(out HttpClient client)) { client = new HttpClient(); } return client; } private void ReturnHttpClient(HttpClient client) { ApiClient.Add(client); } private string GetUriString(string request) { return $"{_backendUrl}/api/{request}"; } } }