// // Top Level Functions // public void UpdateMarketDataFull(CancellationToken cancelToken) { // Update Status, Get URLS of HTML pages Status = MarketUpdateStatus.GettingItemList; UpdateMarketData(GetItemURLs(), cancelToken); DataBaseManager.UpdateTradableIDs(); }
public void UpdateMarketData(CancellationToken cancelToken) { // Update Status, Get URLS out of DB Status = MarketUpdateStatus.GettingItemList; UpdateMarketData(GetItemURLsDB(), cancelToken); }
private void UpdateMarketData(string[] itemURLList, CancellationToken cancelToken) { DataBaseManager.ResetMarketTable(); int[] s = new int[itemURLList.Length]; for (int i = 0; i < itemURLList.Length; i++) { s[i] = Convert.ToInt32(itemURLList[i].Replace("quicklook.html?typeid=", "")); } DataBaseManager.SaveIDs(s); // Reset status data ItemsFinishedCount = 0; TotalItemCount = itemURLList.Length; FailureCount = 0; // Declarate tasks, task management Task[] tasks = new Task[TotalItemCount]; bool[] saved = new bool[TotalItemCount]; bool[] failures = new bool[TotalItemCount]; // Init tasks, task management Status = MarketUpdateStatus.GettingItemData; for (int y = 0; y < itemURLList.Length - 1; y++) { string url = itemURLList[y]; saved[y] = false; failures[y] = false; tasks[y] = Task.Factory.StartNew(() => CreateMarketItem(url, cancelToken, ref failures[y])); } // While one task is not completed and therefore sets done to false bool done = false; while (!done) { if (cancelToken.IsCancellationRequested) { break; } done = true; // Check if tasks are done for (int i = 0; i < tasks.Length - 1; i++) { if (!tasks[i].IsCompleted) { done = false; } else { // If task does not report failure via ref bool if (!failures[i]) { if (!saved[i]) { DataBaseManager.SaveMarketItem(marketItems[marketItems.Count - 1]); DataBaseManager.MarkDone(marketItems[marketItems.Count - 1].ID); ItemsFinishedCount++; saved[i] = true; } } // Else increase failure count, Retry else { FailureCount++; } } } } Status = MarketUpdateStatus.Idle; }