using AntCity.CityBuilder.DataModel.Model; using Newtonsoft.Json; using System.Collections.Generic; using System.Net.Http; using System.Threading.Tasks; namespace AntCity.Base.WebClient { public class AntCityApiClient { public readonly string BaseUrl; public string CityBuilderUrl => $"{BaseUrl}/CityBuilder"; private readonly string ApiKey; //----------------------------------------------------------------------------------------------------------- private static readonly JsonSerializerSettings JsonSerializerSettings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.Auto }; //----------------------------------------------------------------------------------------------------------- public AntCityApiClient(bool isHttps, string apiUrl, int apiPort, string apiKey) { BaseUrl = $"{(isHttps ? "https://" : "http://")}{apiUrl}:{apiPort}"; ApiKey = apiKey; } //----------------------------------------------------------------------------------------------------------- private HttpClient BuildClient() { HttpClientHandler httpClientHandler = new HttpClientHandler(); httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; }; return new HttpClient(httpClientHandler); } //----------------------------------------------------------------------------------------------------------- public async Task> GetUniverses() { using HttpClient httpClient = BuildClient(); HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, $"{CityBuilderUrl}/Universe"); HttpResponseMessage response = await httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); List universes = JsonConvert.DeserializeObject>(await response.Content.ReadAsStringAsync(), JsonSerializerSettings); return universes; } //----------------------------------------------------------------------------------------------------------- public async Task> GetCities() { using HttpClient httpClient = BuildClient(); HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, $"{CityBuilderUrl}/City"); HttpResponseMessage response = await httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); List cities = JsonConvert.DeserializeObject>(await response.Content.ReadAsStringAsync(), JsonSerializerSettings); return cities; } //----------------------------------------------------------------------------------------------------------- public async Task> GetCities(int universeId) { using HttpClient httpClient = BuildClient(); HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, $"{CityBuilderUrl}/Universe/{universeId}/City"); HttpResponseMessage response = await httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); List cities = JsonConvert.DeserializeObject>(await response.Content.ReadAsStringAsync(), JsonSerializerSettings); return cities; } //----------------------------------------------------------------------------------------------------------- public async Task GetTile(int tileId) { using HttpClient httpClient = BuildClient(); HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, $"{CityBuilderUrl}/Tile/{tileId}"); HttpResponseMessage response = await httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); SimTile tile = JsonConvert.DeserializeObject(await response.Content.ReadAsStringAsync(), JsonSerializerSettings); return tile; } //----------------------------------------------------------------------------------------------------------- public async Task> GetCityTiles(int cityId) { using HttpClient httpClient = BuildClient(); HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, $"{CityBuilderUrl}/City/{cityId}/Tile"); HttpResponseMessage response = await httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); List tiles = JsonConvert.DeserializeObject>(await response.Content.ReadAsStringAsync(), JsonSerializerSettings); return tiles; } //----------------------------------------------------------------------------------------------------------- public async Task> GetAirSpaceIntersects(string polygon) { using HttpClient httpClient = BuildClient(); HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, $"{CityBuilderUrl}/AirSpaceIntersects/{polygon}"); HttpResponseMessage response = await httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); List airSpaceList = JsonConvert.DeserializeObject>(await response.Content.ReadAsStringAsync(), JsonSerializerSettings); return airSpaceList; } //----------------------------------------------------------------------------------------------------------- public async Task GetModeledBuilding(int modeledBiuldingId) { using HttpClient httpClient = BuildClient(); HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, $"{CityBuilderUrl}/ModeledBuilding/{modeledBiuldingId}"); HttpResponseMessage response = await httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); ModeledBuilding modeledBuilding = JsonConvert.DeserializeObject(await response.Content.ReadAsStringAsync(),JsonSerializerSettings); return modeledBuilding; } //----------------------------------------------------------------------------------------------------------- public async Task> GetModeledBuildingIntersects(int cityId, string polygon) { using HttpClient httpClient = BuildClient(); HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, $"{CityBuilderUrl}/City/{cityId}/ModeledBuildingIntersects/{polygon}"); HttpResponseMessage response = await httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); List modeledBuilding = JsonConvert.DeserializeObject>(await response.Content.ReadAsStringAsync(), JsonSerializerSettings); return modeledBuilding; } //----------------------------------------------------------------------------------------------------------- public async Task> GetDeletedFeatureIntersects(int cityId, string polygon) { using HttpClient httpClient = BuildClient(); HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, $"{CityBuilderUrl}/City/{cityId}/DeletedFeatureIntersects/{polygon}"); HttpResponseMessage response = await httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); List modeledBuilding = JsonConvert.DeserializeObject>(await response.Content.ReadAsStringAsync(), JsonSerializerSettings); return modeledBuilding; } //----------------------------------------------------------------------------------------------------------- public async Task PostDeletedFeature(int cityId, string name, string assetKey, double latitude, double longitude, string polygon) { string postUrl = $"{CityBuilderUrl}/DeletedFeature/{cityId}/{name}/{assetKey}/{latitude}/{longitude}/{polygon}"; //UnityEngine.Debug.Log(postUrl); using HttpClient httpClient = BuildClient(); HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post,postUrl ); HttpResponseMessage response = await httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); //List modeledBuilding = JsonConvert.DeserializeObject>(await response.Content.ReadAsStringAsync(), JsonSerializerSettings); return await response.Content.ReadAsStringAsync(); } } }