示例#1
0
        //
        //  Top Level Functions
        //

        public void UpdateMarketDataFull(CancellationToken cancelToken)
        {
            // Update Status, Get URLS of HTML pages
            Status = MarketUpdateStatus.GettingItemList;
            UpdateMarketData(GetItemURLs(), cancelToken);
            DataBaseManager.UpdateTradableIDs();
        }
示例#2
0
 public void UpdateMarketData(CancellationToken cancelToken)
 {
     // Update Status, Get URLS out of DB
     Status = MarketUpdateStatus.GettingItemList;
     UpdateMarketData(GetItemURLsDB(), cancelToken);
 }
示例#3
0
        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;
        }