/// <summary> /// Creates Answer object from internal object storage /// </summary> /// <returns>Answer object</returns> private Answer ConvertToAnswer() { Answer answer = new Answer(); int dealerIndex = 0; answer.dealers = new DealerAnswer[DealersCollection.Count]; foreach (var dealer in DealersCollection) { DealerInternal d = dealer.Value; answer.dealers[dealerIndex] = new DealerAnswer { dealerId = d.dealerId, name = d.name, vehicles = d.Vehicles.ToArray() }; dealerIndex++; } return(answer); }
/// <summary> /// Retrieves Dealer, also used for optimized data retrieval, /// where internal data storage is populated and if the process of retrieval initiated then return null /// </summary> /// <param name="datasetId">Dataset Id</param> /// <param name="dealerId">Dealed Id</param> /// <returns>Dealer object or null</returns> public async Task <DealerResponse> GetDealerAsync(string datasetId, int dealerId) { try { if (DealersCollection.ContainsKey(dealerId)) { return(null); } Debug.WriteLine($"Start GetDealerAsync {dealerId}"); long startTicks = DateTime.UtcNow.Ticks; // reserve dealer id for processing by current task (if two tasks are trying to deal with the same dealerId) DealersCollection[dealerId] = new DealerInternal(); HttpResponseMessage response = await client.GetAsync(String.Format(Constants.GET_DEALER_URL, datasetId, dealerId)); if (!response.IsSuccessStatusCode) { throw new ApiException($"GetDealerAsync: status code {response.StatusCode}"); } DealerResponse dealer = await response.Content.ReadAsAsync <DealerResponse>(); DealersCollection[dealerId].dealerId = dealer.dealerId; DealersCollection[dealerId].name = dealer.name; long elapsed = (DateTime.UtcNow.Ticks - startTicks) / 10000; Debug.WriteLine($"Finish GetDealerAsync {dealerId} - elapsed: {elapsed}"); return(dealer); } catch (Exception e) { throw new ApiException($"GetDealerAsync: {e.Message}", e.InnerException); } }