public DataDBJobs(string dbConnectionString, bool captureJob, string[] siteBusy, string ip) { this._dbConnectionString = dbConnectionString; if (true)//GetTuning()) // данному парсеру разрешена работа? { if (captureJob) // нужно захватывать задание (т.е. создан стартером) { string[][] jobs_ = GetJobs(siteBusy); //берем данные из строки ParsersJob Array.Resize(ref jobs, jobs_.Count()); for (int i = 0; i < jobs_.Count(); i++) { string[] job = jobs_[i]; Array.Resize(ref job,job.Count()+1); job[job.Count()-1]=ip; jobs[i] = new DataDBJob(dbConnectionString, i + siteBusy.Count(), job); } } } }
private void _timer_Starter_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { _timerStarter.Stop(); int streamNumber = GetFreeStream(); if (streamNumber >= 0) { try { // проверка связи с БД и соответствующая отметка //if (CheckDBConnection("SPM таймер запуска стартовал. ", streamNumber, false)) { DataDBJob job = null; try { // считаем задание и попытаемя его запустить lock (_siteBusy) { lock (newjoblockstring) { job = new DataDBJob(_dbConnectionString, streamNumber, true, _siteBusy); if (job != null) { if (!String.IsNullOrEmpty(job.Site)) { if (!string.IsNullOrEmpty(job.Site)) // задание захвачено { _siteBusy[streamNumber] = job.Site; // сайт занят lock (_siteBusyStart) _siteBusyStart[streamNumber] = DateTime.Now; } } else { _timerStarter.Interval = 15000; Console.WriteLine(DateTime.Now+" no work"); } } else { _timerStarter.Interval = 15000; Console.WriteLine(DateTime.Now+" no work"); } } } if (!String.IsNullOrEmpty(job.Site)) { Console.WriteLine(DateTime.Now + " On " + streamNumber + " stream started job " + job.Site); //ShowInfoMessage(); _timerStarter.Interval = 1; //_timerStarter.Start(); _timerStarter.Enabled=true; job.StartJob(); } } catch (Exception ex) // ловим ошибку плагина { DataDBService ddbs = new DataDBService(); lock (_siteBusy) ddbs.WriteErrorMessage(_dbConnectionString, streamNumber, "Сайт " + _siteBusy[streamNumber] + ". Необработанная ошибка плагина", ex.Message); ddbs.Dispose(); GC.SuppressFinalize(ddbs); } finally { if (job != null) { lock (_siteBusy) { if (!string.IsNullOrEmpty(_siteBusy[streamNumber])) { Console.WriteLine(DateTime.Now + " On " + streamNumber + " stream finished job " + job.Site); _siteBusy[streamNumber] = ""; // сайт свободен _siteBusyStart[streamNumber] = DateTime.MaxValue; _timerStarter.Interval = 1; //_timerStarter.Start(); //ShowInfoMessage(); } else _timerStarter.Interval = 15000; } { job.Dispose(); GC.SuppressFinalize(job); } } _timerStarter.Start(); //CheckDBConnection("SPM таймер запуска остановлен. ", streamNumber, false); } } } catch (Exception ex) // ловим ошибку соединения с БД { Console.WriteLine("Ошибка 5675 "+ex.Message); } finally { lock (_siteBusy) _siteBusy[streamNumber] = ""; // сайт свободен } } else { _timerStarter.Interval = 15000; _timerStarter.Start(); Console.WriteLine(DateTime.Now + " No free threads"); } }
public void OnStop() { //Останавливаем таймер Starter if(this._timerStarter!=null) this._timerStarter.Stop(); //Останавливаем таймер Scheduler if(this._timerScheduler!=null) this._timerScheduler.Stop(); // активность: выключение DataDBService ddbs = new DataDBService(); ddbs.WriteMessageAboutActivity(_dbConnectionString, 10001, "SPM остановлен."); ddbs.Dispose(); GC.SuppressFinalize(ddbs); // незаконченные задания - сброс состояния "занято" DataDBJob job = new DataDBJob(_dbConnectionString, 10002, false, new string[20]); job.JobToNoBusy(); job.Dispose(); GC.SuppressFinalize(job); }
private void _timer_Scheduler_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { if (!_startTimerScheduler) // в один поток { if (CheckDBConnection("SPM таймер запуска стартовал. ", 10002, false)) { _startTimerScheduler = true; this._timerScheduler.Stop(); try { DataDBJob job = new DataDBJob(_dbConnectionString, 10002, false, new string[15]); job.JobSchedule(); } catch (Exception ex) // ловим ошибку соединения с БД { DataDBService ddbs = new DataDBService(); ddbs.WriteMessageAboutActivity(_dbConnectionString, 0, ex.Message); ddbs.Dispose(); GC.SuppressFinalize(ddbs); } this._timerScheduler.Start(); _startTimerScheduler = false; } } }