void IRequestHandler.SetApiResponse(string responseJson, Action onSuccess, Action <string> onError) { AssetsResponse response = null; try { response = Utils.FromJsonWithNulls <AssetsResponse>(responseJson); } catch (Exception e) { onError?.Invoke(e.Message); } if (response == null) { return; } RequestAssetInBatch request = null; AssetResponse asset = null; int batchCount = requests.Count; for (int i = batchCount - 1; i >= 0; i--) { request = requests[i]; for (int j = 0; j < response.assets.Length; j++) { asset = response.assets[j]; bool isMatch = asset.token_id == request.tokenId && String.Equals(asset.asset_contract.address, request.contractAddress, StringComparison.OrdinalIgnoreCase); if (isMatch) { if (VERBOSE) { Debug.Log($"BatchAssetsRequestHandler: ({GetHashCode()}) resolved {request.contractAddress}/{request.tokenId}"); } request.Resolve(asset); requests.RemoveAt(i); break; } } } // Retry possible unresolved requests if (requests.Count > 0) { RetryBatch(requests); } onSuccess?.Invoke(); }
public void AddRequest(RequestAssetInBatch request) { requests.Add(request); query += $"asset_contract_addresses={request.contractAddress}&token_ids={request.tokenId}&"; if (VERBOSE) { Debug.Log($"BatchAssetsRequestHandler: ({GetHashCode()}) adding {request.contractAddress}/{request.tokenId}"); } if (query.Length >= QUERY_MAX_LENGTH) { CloseBatch(); } }
public RequestBase <AssetResponse> FetchNFT(string contractAddress, string tokenId) { if (cacheAssetResponses.TryGetValue(RequestAssetInBatch.GetId(contractAddress, tokenId), out RequestBase <AssetResponse> request)) { return(request); } var newRequest = new RequestAssetInBatch(contractAddress, tokenId); AddToCache(newRequest); newRequest.OnFail += OnRequestFailed; if (openBatchAssetsRequestHandler == null || !openBatchAssetsRequestHandler.isOpen) { openBatchAssetsRequestHandler = new BatchAssetsRequestHandler(this); requestScheduler.EnqueueRequest(openBatchAssetsRequestHandler); } openBatchAssetsRequestHandler.AddRequest(newRequest); return(newRequest); }