Esempio n. 1
0
        private void                            ThreadQueryMarketPrices(Object a_ParamObj)
        {
            UpdateThreadParam a_Param = (UpdateThreadParam)a_ParamObj;

            for (; !m_EndUpdateThread;)
            {
                UInt32        blockSize    = a_Param.PriceProvider.GetRequestBlockSize();
                List <UInt32> queriedItems = new List <UInt32>(a_Param.UpdateQueue.Count);

                lock (a_Param.UpdateQueue)
                {
                    if (0 == a_Param.UpdateQueue.Count)
                    {
                        return;
                    }

                    for (UInt32 i = 0; i < blockSize; i++)
                    {
                        if (0 == a_Param.UpdateQueue.Count)
                        {
                            break;
                        }

                        UInt32 currItem = a_Param.UpdateQueue.Dequeue();
                        queriedItems.Add(currItem);
                    }
                }

                try
                {
                    List <PriceRecord> newPrices = a_Param.PriceProvider.GetPrices(queriedItems);
                    ApplyPrices(newPrices, a_Param.PriceProvider.GetCurrentFilter());
                }
                catch (System.Exception a_Exception)
                {
                    Debug.Assert(false, a_Exception.Message);
                    System.Diagnostics.Debug.WriteLine(a_Exception.Message);

                    // Return unqueried items back
                    lock (a_Param.UpdateQueue)
                    {
                        foreach (UInt32 typeID in queriedItems)
                        {
                            a_Param.UpdateQueue.Enqueue(typeID);
                        }
                    }
                }
            }

            Debug.WriteLine(String.Format("ThreadQueryMarketPrices: Stopped updating prices"));
        }
Esempio n. 2
0
        private void                            TestMarketPrices(IPriceProvider a_PriceProvider, Settings.V2._PriceSettings a_Settings, bool a_Silent)
        {
            ItemFilter filter = new ItemFilter();

            filter.HasMarketGroup  = TristateFilter.Yes;
            filter.IsPricesOk      = TristateFilter.No;
            filter.PriceExpiryDays = a_Settings.ExpiryDays;

            UInt32[] badItems = m_ItemsDB.FilterItems(filter);
            if (0 == badItems.Count())
            {
                return;
            }

            if (!a_Silent)
            {
                if (DialogResult.Yes != MessageBox.Show("You have outdated market prices. Would you like to update them now?", Application.ProductName, MessageBoxButtons.YesNo))
                {
                    return;
                }
            }

            Queue <UInt32> pricesQueue = new Queue <UInt32>();

            foreach (UInt32 currItem in badItems)
            {
                pricesQueue.Enqueue(currItem);
            }

            StopUpdaterThread();

            UpdateThreadParam param = new UpdateThreadParam();

            param.PriceProvider = a_PriceProvider;
            param.UpdateQueue   = pricesQueue;

            ThreadWithParam paramThread = new ThreadWithParam();

            paramThread.Function  = ThreadQueryMarketPrices;
            paramThread.Parameter = param;

            m_EndUpdateThread = false;
            m_UpdateQueue     = pricesQueue;

            m_UpdateThread = paramThread.CreateThread();
            m_UpdateThread.IsBackground = true;
            m_UpdateThread.Start();
        }