//public void StartResetProgramStatesThread(ThreadPriority aThreadPriority) //{ // if (_resetProgramStatesThread == null || !_resetProgramStatesThread.IsAlive) // { // _resetProgramStatesThread = new Thread(ProgramStatesThread); // _resetProgramStatesThread.Priority = aThreadPriority; // _resetProgramStatesThread.Name = "Program states thread"; // _resetProgramStatesThread.IsBackground = true; // _resetProgramStatesThread.Start(); // } //} //private void ProgramStatesThread() //{ // lock (SingleProgramStateUpdate) // { // if (_lastProgramUpdate == DateTime.MinValue) // { // return; // } // while (true) // { // System.TimeSpan ts = DateTime.Now - _lastProgramUpdate; // Log.Info("BusinessLayer: ProgramStatesThread waiting...{0} sec", ts.TotalSeconds); // if (ts.TotalSeconds >= 60) //if more than 60 secs. has passed since last update to the program table, then lets do the program states // { // Log.Info("BusinessLayer: ProgramStatesThread - done waiting. calling SynchProgramStatesForAll"); // _lastProgramUpdate = DateTime.MinValue; // Schedule.SynchProgramStatesForAll(); // return; // } // else // { // Thread.Sleep(1000); // } // } // } //} //private void ImportMySqlThread(object aImportParam) //{ // lock (SingleInsert) // { // ImportParams MyParams = (ImportParams)aImportParam; // InsertMySql(MyParams); // _lastProgramUpdate = DateTime.Now; // StartResetProgramStatesThread(ThreadPriority.BelowNormal); // } //} //private void ImportSqlServerThread(object aImportParam) //{ // lock (SingleInsert) // { // ImportParams MyParams = (ImportParams)aImportParam; // InsertSqlServer(MyParams); // _lastProgramUpdate = DateTime.Now; // StartResetProgramStatesThread(ThreadPriority.BelowNormal); // } //} private static void InsertProgramsThreadStart() { try { Log.Debug("BusinessLayer: InsertProgramsThread started"); IGentleProvider prov = ProviderFactory.GetDefaultProvider(); string provider = prov.Name.ToLowerInvariant(); string defaultConnectString = prov.ConnectionString; DateTime lastImport = DateTime.Now; InsertProgramsDelegate insertProgams; switch (provider) { case "mysql": insertProgams = InsertProgramsMySql; break; case "sqlserver": insertProgams = InsertProgramsSqlServer; break; default: Log.Info("BusinessLayer: InsertPrograms unknown provider - {0}", provider); return; } while (true) { if (lastImport.AddSeconds(60) < DateTime.Now) { // Done importing and 60 seconds since last import // Remove old programs TvBusinessLayer layer = new TvBusinessLayer(); layer.RemoveOldPrograms(); // Let's update states Schedule.SynchProgramStatesForAll(); // and exit lock (_programInsertsQueue) { // Has new work been queued in the meantime? if (_programInsertsQueue.Count == 0) { Log.Debug("BusinessLayer: InsertProgramsThread exiting"); _insertProgramsThread = null; break; } } } _pendingProgramInserts.WaitOne(10000); // Check every 10 secs while (_programInsertsQueue.Count > 0) { try { ImportParams importParams; lock (_programInsertsQueue) { importParams = _programInsertsQueue.Dequeue(); } importParams.ConnectString = defaultConnectString; Thread.CurrentThread.Priority = importParams.Priority; insertProgams(importParams); Log.Debug("BusinessLayer: Inserted {0} programs to the database", importParams.ProgramList.Count); lastImport = DateTime.Now; Thread.CurrentThread.Priority = ThreadPriority.Lowest; } catch (Exception ex) { Log.Error("BusinessLayer: InsertMySQL/InsertMSSQL caused an exception:"); Log.Write(ex); } } // Now all queued inserts have been processed, clear Gentle cache Gentle.Common.CacheManager.ClearQueryResultsByType(typeof (Program)); } } catch (Exception ex) { Log.Error("BusinessLayer: InsertProgramsThread error - {0}, {1}", ex.Message, ex.StackTrace); } }