using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using UnityEngine.Purchasing.Interfaces; using UnityEngine.Purchasing.Models; namespace UnityEngine.Purchasing { class SkuDetailsQueryResponse : ISkuDetailsQueryResponse { readonly ConcurrentBag<(IGoogleBillingResult, IEnumerable)> m_Responses = new ConcurrentBag<(IGoogleBillingResult, IEnumerable)>(); public void AddResponse(IGoogleBillingResult billingResult, IEnumerable skuDetails) { m_Responses.Add((billingResult, skuDetails)); } public List SkuDetails() { return m_Responses.Where(response => response.Item1.responseCode == GoogleBillingResponseCode.Ok) .SelectMany(response => response.Item2).ToList(); } public bool IsRecoverable() { return m_Responses.Select(response => response.Item1).Any(IsRecoverable); } static bool IsRecoverable(IGoogleBillingResult billingResult) { return billingResult.responseCode == GoogleBillingResponseCode.ServiceUnavailable || billingResult.responseCode == GoogleBillingResponseCode.DeveloperError; } } }