public RiotRestAPI.ItemDTO LoadItem(string region, string version, int itemId) { RiotRestAPI.ItemDTO item = null; if (DoesRawCachedCopyOfItemExist(region, version, itemId)) { item = LoadItemFromRawFile(region, version, itemId); } else { string rawResponse = ""; item = LoadItemFromAPI(region, version, itemId, ref rawResponse); if (item != null) { // Save the raw response file to speed up future queries string prettyJSON = JsonPrettyPrinterPlus.PrettyPrinterExtensions.PrettyPrintJson(rawResponse); string[] rawfilePathParts = new string[] { _rawItemDataDirectory, GenerateRawItemFileName(region, version, itemId) }; string filePath = System.IO.Path.Combine(rawfilePathParts); FileStream fstream = new FileStream(filePath, FileMode.Create); byte[] data = Encoding.ASCII.GetBytes(prettyJSON); fstream.Write(data, 0, data.Length); fstream.Close(); } } return(item); }
private ItemDTO LoadItemFromAPI(string region, string version, int itemId, ref string rawResponse) { RiotRestAPI.ItemDTO item = null; bool rateLimitHit = true; while (rateLimitHit) { string resource = "/static-data/" + region + "/v1.2/item/" + itemId; Dictionary <string, string> queryParams = new Dictionary <string, string>(); queryParams["version"] = version; queryParams["itemData"] = "all"; item = _apiConnection.Get <RiotRestAPI.ItemDTO>(resource, queryParams, ref rateLimitHit, ref rawResponse); if (item != null) { LogManager.LogMessage("Loaded item " + region + "-" + version + "-" + itemId + " from the API."); } else if (rateLimitHit) { LogManager.LogMessage("Hit rate limit. Waiting to retry."); System.Threading.Thread.Sleep(RATE_LIMIT_WAIT_IN_MS); } else { LogManager.LogMessage("Unable to load item: " + region + "-" + version + "-" + itemId); } } return(item); }
private ItemDTO LoadItemFromRawFile(string region, string version, int itemId) { RiotRestAPI.ItemDTO item = null; string[] rawfilePathParts = new string[] { _rawItemDataDirectory, GenerateRawItemFileName(region, version, itemId) }; string filePath = System.IO.Path.Combine(rawfilePathParts); FileStream fstream = new FileStream(filePath, FileMode.Open); DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(RiotRestAPI.ItemDTO)); object objResponse = null; try { objResponse = jsonSerializer.ReadObject(fstream); } catch (System.Xml.XmlException ex) { LogManager.LogMessage("XML Exception parsing item response: " + region + "-" + version + "-" + itemId + " - " + ex.Message); } catch (Exception ex) { LogManager.LogMessage("Generic Exception parsing item response: " + region + "-" + version + "-" + itemId + " - " + ex.Message); } fstream.Close(); if (objResponse == null) { LogManager.LogMessage("Failed to load item " + region + "-" + version + "-" + itemId + " from cached data. Deleting file."); File.Delete(filePath); } else { item = (RiotRestAPI.ItemDTO)Convert.ChangeType(objResponse, typeof(RiotRestAPI.ItemDTO)); LogManager.LogMessage("Loaded item " + region + "-" + version + "-" + itemId + " from cached data."); } return(item); }