private void monitorQueue()
{
Console.WriteLine("Monitor starting");
initialiseBackgroundPlayer();
DateTime nextQueueCheck = DateTime.Now;
while (monitorRunning)
{
if (requestChannelOpen)
{
openRadioChannelInternal();
requestChannelOpen = false;
holdChannelOpen = true;
}
if (!holdChannelOpen && channelOpen)
{
closeRadioInternalChannel();
}
if (immediateClips.Count > 0)
{
try
{
playQueueContents(immediateClips, true);
}
catch (Exception e)
{
Console.WriteLine("Exception processing immediate clips: " + e.Message);
lock (immediateClips)
{
immediateClips.Clear();
}
}
}
if (requestChannelClose)
{
if (channelOpen)
{
if (!queueHasDueMessages(queuedClips, false) && !queueHasDueMessages(immediateClips, true))
{
requestChannelClose = false;
holdChannelOpen = false;
closeRadioInternalChannel();
}
}
else
{
requestChannelClose = false;
holdChannelOpen = false;
}
}
if (DateTime.Now > nextQueueCheck)
{
nextQueueCheck = nextQueueCheck.Add(queueMonitorInterval);
try
{
playQueueContents(queuedClips, false);
allowPearlsOnNextPlay = true;
}
catch (Exception e)
{
Console.WriteLine("Exception processing queued clips: " + e.Message);
lock (queuedClips)
{
queuedClips.Clear();
}
}
}
else
{
Thread.Sleep(immediateMessagesMonitorInterval);
continue;
}
}
//writeMessagePlayedStats();
playedMessagesCount.Clear();
stopBackgroundPlayer();
}