Esempio n. 1
0
 /// <summary>
 /// Конструктор
 /// </summary>
 /// <param name="parameters"></param>
 public OnlineRunnerWebQueue(RunnerWebQueueParameters parameters)
 {
     WEBSERVICE_URL = parameters.NewElementUrl;
     //_method = parameters.Method;
     _timeout     = parameters.Timeout;
     _contentType = parameters.ContentType;
 }
        /// <summary>
        /// Обработка элемента очереди ParserQueue
        /// </summary>
        /// <returns>Кол-во обработанных элементов очереди</returns>
        public static int processQueue(RunnerWebQueueParameters parserWebQueueParameters)
        {
            // Создание обработчика очереди
            IRunnerWebQueue    parserWebQueue = new OnlineRunnerWebQueue(parserWebQueueParameters);
            RunnerQueueElement elt            = null;

            try
            {
                // Получение элемента очереди
                elt = parserWebQueue.GetNewElement();

                if (elt == null)
                {
                    Console.WriteLine("No new elements to process.");
                    return(0);
                }

                // Пометка статусом "Взят в обработку"
                parserWebQueue.SetQueueElementStatus(elt.RunnerQueueId, QueueStatus.Processing);

                // Выполнить команду
                Console.WriteLine("Starting command: {0}, params: {1}", elt.CommandName, elt.CommandParameters);
                RunWebCommandResult runnerResult = RunWebCommand(elt.CommandName, elt.CommandParameters);


                // ToDo: обработка ошибки
                if (runnerResult.ResultCode != 0)
                {
                    Console.WriteLine("Error in main: {0}. \nStack trace: {1}", runnerResult.OutputText, runnerResult.ErrorText);
                    parserWebQueue.SetQueueElementStatus(elt.RunnerQueueId, QueueStatus.DoneWithError, runnerResult.ErrorText);
                    Console.WriteLine("Error saved.");
                    return(0);                    //stop processing
                }

                // Пометка элемента очереди как успешно обработанный
                parserWebQueue.SetQueueElementStatus(elt.RunnerQueueId, QueueStatus.Done);

                return(1);
            }
            catch (Exception exc)
            {
                Console.WriteLine("Error in main: {0}", exc.Message);

                // Установить статус "Ошибка обработки"
                if (elt != null)
                {
                    parserWebQueue.SetQueueElementStatus(elt.RunnerQueueId, QueueStatus.DoneWithError, exc.Message);
                    Console.WriteLine("Error saved.");
                }
            }
            return(0);
        }
        static void Main(string[] args)
        {
            Console.WriteLine("-- RunnerQueueWorker, ver 0.4 --");
            Console.WriteLine("Starting work.");

            string iniFullPath = PathUtils.GetApplicationIniPath();

            var parserWebQueueParameters = new RunnerWebQueueParameters();
            int nElementsToProcess       = 0;

            try
            {
                // Считывание настроек программы
                IniReader iniReader = new IniReader(iniFullPath);
                Console.WriteLine($"Read config file: {iniFullPath}");

                // Program params
                nElementsToProcess = iniReader.GetIntValue("NumberElementsForProcessing", "Program", 0);

                // WebService parameters
                parserWebQueueParameters.NewElementUrl = iniReader.GetValue("NewElementUrl", "QueueWebService");
                parserWebQueueParameters.Timeout       = iniReader.GetIntValue("Timeout", "QueueWebService", 20000);
                parserWebQueueParameters.ContentType   = "application/json";
            }
            catch (FileNotFoundException)
            {
                Console.WriteLine($"Can't find ini file at {iniFullPath}.");
                return;
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error readind ini file: {ex.GetType()}");
                return;
            }

            while (nElementsToProcess-- > 0)
            {
                int cnt = processQueue(parserWebQueueParameters);
                if (cnt == 0)
                {
                    break;
                }
            }

            Console.WriteLine("Work finished.");
            //Console.WriteLine("Work finished. Press any key.");
            //Console.ReadKey();
        }