private void ProcessChunk(byte[] data, int len)
{
bool headerRead = headerReader.Read(data, len);
if (!headerRead)
{
return;
}
IList<MediaContext> successSubscribers = new List<MediaContext>();
int count = subscribers.Count;
while (count > 0)
{
MediaContext subscriber;
if (subscribers.TryDequeue(out subscriber))
{
try
{
var networkStream = subscriber.Client.GetStream();
if (subscriber.Status == MediaContextStatus.Initial)
{
networkStream.Write(headerReader.Head, 0, headerReader.Head.Length);
subscriber.Status = MediaContextStatus.Active;
}
networkStream.Write(data, 0, len);
successSubscribers.Add(subscriber);
}
catch (Exception)
{
logger.Error("Failed to send data to subscriber. Channel={0}", channel);
}
}
--count;
}
foreach (MediaContext subscriber in successSubscribers)
{
subscribers.Enqueue(subscriber);
}
}