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"); } }
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; } } }
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 bool NSetJobState(int id, int currentPage, int countPagesTotal, int CountAnnouncement, int jobid, HtmlDocument doc) { // текущие дата и время DateTime dateTime = DateTime.Now; //new DateTime(); string dt = dateTime.ToString("yyyy-MM-dd HH:mm:ss.fff"); using (DataDBService ddbs = new DataDBService()) { try { //update string SQLstr = "UPDATE [PJobUpdate] SET " + " StartType=1" + " ,LastDate='" + dt + "'" //+ " ,LastDocument= '" + doc.DocumentNode.InnerHtml.Replace("'", "''").Substring(0,999) + "'" + " ,CurrentPage=" + currentPage.ToString() + " ,CountPagesTotal=" + countPagesTotal.ToString() + " ,CountAnnouncement=CountAnnouncement+" + CountAnnouncement.ToString() + " ,Complete=" + (currentPage + 1 == _firstPage + _pageCount || currentPage == countPagesTotal ? 1 : 0).ToString() /* статус = 1 фиксируется в общем порядке + (currentPage + 1 == _firstPage + _pageCount || currentPage == countPagesTotal ? " ,ParserStatus=1" : "") */ + (currentPage + 1 == _firstPage + _pageCount || currentPage == countPagesTotal ? " ,DateEnd='" + dt + "'" : "") + " Where ID = " + id.ToString(); string s = ddbs.ExecuteSQLCommand(SQLstr, _dbConnectionString); //DataSet ds = ddbs.CreateCommandAndUpdate(SQLstr, _dbConnectionString); if (!string.IsNullOrEmpty(s)) ddbs.WriteErrorMessage(_dbConnectionString, _streamNumber, null, "Ошибка записи текущего состояния задания. " + jobid + "."); } finally { ddbs.Dispose();} } return (currentPage + 1 == _firstPage + _pageCount || currentPage == countPagesTotal ? false : true); }