コード例 #1
0
        public void ProcessQueuedXML()
        {
            if (!_processingQueue)
            {
                _processingQueue = true;
                // Don't process the queue more than once every 10 seconds.
                if (_lastQueueProcessingDT.AddSeconds(10).CompareTo(DateTime.UtcNow) < 0)
                {
                    _lastQueueProcessingDT = DateTime.UtcNow;

                    // Limit this loop to running for no more than 1/2 second
                    while (_unprocessedXMLFiles.Count > 0 &&
                        _lastQueueProcessingDT.AddMilliseconds(500).CompareTo(DateTime.UtcNow) > 0)
                    {
                        bool process = true;
                        string xmlFile = "";
                        lock (_unprocessedXMLFiles) { xmlFile = _unprocessedXMLFiles.Dequeue(); }
                        // If the next file is an asset data file and we still have other files waiting or
                        // being downloaded then move the asset data file to the back of the queue.
                        if (xmlFile.ToUpper().Contains("ASSETS") &&
                            (_unprocessedXMLFiles.Count > 0 || _downloadsInProgress > 0))
                        {
                            if (_unprocessedXMLFiles.Count == 1 &&
                                _unprocessedXMLFiles.Peek().ToUpper().Contains("ASSETS"))
                            {
                                // If this character also gets the corp updates then there may be another
                                // asset file waiting. If this is the case, allow the xml to be processed.
                            }
                            else
                            {
                                lock (_unprocessedXMLFiles) { _unprocessedXMLFiles.Enqueue(xmlFile); }
                                process = false;
                                // If only the single assets file is left and we're still waiting on other
                                // files to download then just break out of the loop for now.
                                if (_unprocessedXMLFiles.Count == 1 && _downloadsInProgress > 0) { break; }
                            }
                        }

                        if (process)
                        {
                            DataImportParams parameters = new DataImportParams();
                            CharOrCorp corc = CharOrCorp.Char;
                            short walletID = 0;
                            if (xmlFile.ToUpper().Contains("CORP")) { corc = CharOrCorp.Corp; }
                            if (xmlFile.ToUpper().Contains("ACCOUNTKEY="))
                            {
                                walletID = short.Parse(xmlFile.Substring(
                                    xmlFile.ToUpper().IndexOf("ACCOUNTKEY=") + 11, 4));
                            }
                            parameters.corc = corc;
                            parameters.walletID = walletID;
                            parameters.xmlData = new XmlDocument();
                            parameters.xmlData.Load(xmlFile);

                            if (xmlFile.ToUpper().Contains("ASSETS"))
                            {
                                ThreadPool.QueueUserWorkItem(UpdateAssetsFromXML, parameters);
                            }
                            else if (xmlFile.ToUpper().Contains("TRANSACTIONS"))
                            {
                                ThreadPool.QueueUserWorkItem(UpdateTransactionsFromXML, parameters);
                            }
                            else if (xmlFile.ToUpper().Contains("JOURNAL ENTRIES"))
                            {
                                ThreadPool.QueueUserWorkItem(UpdateJournalFromXML, parameters);
                            }
                            else if (xmlFile.ToUpper().Contains("MARKET ORDERS"))
                            {
                                ThreadPool.QueueUserWorkItem(UpdateOrdersFromXML, parameters);
                            }
                            else if (xmlFile.ToUpper().Contains("INDUSTRY JOBS"))
                            {
                                ThreadPool.QueueUserWorkItem(UpdateIndustryJobsFromXML, parameters);
                            }
                        }
                    }

                    if (_unprocessedXMLFiles.Count > 0)
                    {
                        // If we weren't able to process everything then dump some diagnostics.
                        TimeSpan processingTime = DateTime.UtcNow.Subtract(_lastQueueProcessingDT);

                        StringBuilder message= new StringBuilder(
                            "Warning, not all queued XML files were processed.\r\n");
                        message.Append("Files not processed:\r\n");
                        foreach (string file in _unprocessedXMLFiles)
                        {
                            message.Append(file);
                            message.Append("\r\n");
                        }
                        message.Append("Downloads active: ");
                        message.Append(_downloadsInProgress);
                        message.Append("\r\nApprox processing time: ");
                        message.Append(processingTime.TotalMilliseconds);
                        message.Append(" milliseconds");

                        new EMMAException(ExceptionSeverity.Warning, message.ToString(), true);
                    }
                }

                _processingQueue = false;
            }
        }
コード例 #2
0
 public void ProcessTransactionsXML(XmlDocument fileXml, CharOrCorp corc, short walletID)
 {
     DataImportParams parameters = new DataImportParams();
     parameters.xmlData = fileXml;
     parameters.corc = corc;
     parameters.walletID = walletID;
     ThreadPool.QueueUserWorkItem(UpdateTransactionsFromXML, parameters);
 }
コード例 #3
0
 public void ProcessOrdersXML(XmlDocument fileXml, CharOrCorp corc)
 {
     DataImportParams parameters = new DataImportParams();
     parameters.xmlData = fileXml;
     parameters.corc = corc;
     parameters.walletID = 0;
     ThreadPool.QueueUserWorkItem(UpdateOrdersFromXML, parameters);
 }