//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);
}
}