void QueueToPacketProcessor()
{
do
{
lock (ProcessQueue)
{
mreListener.WaitOne();
while (ProcessQueue.Count > 0)
{
KeyValuePair<Stream, Guid> que = ProcessQueue.Dequeue();
if (que.Key != null)
{
try
{
Packet p = new Packet(que.Key);
if (p != null)
{
_log.InfoFormat("Processing packet: {0}, for connection {1}", p.PacketType.ToString(), que.Value.ToString());
PackageEventArgs pea = new PackageEventArgs(p, que.Value);
EnqueueReceivedPacket(pea);
if (p.ConversionException != null)
{
if (CrashOnException)
{
throw new InvalidPacketException(p.ConversionException);
}
else
{
RaiseExceptionEncountered(p.ConversionException, que.Value);
}
}
if (p.Package != null)
{
ReadOnlyCollection<Exception> packetErrors = p.Package.GetErrors();
if (packetErrors.Count > 0)
{
foreach (Exception e in packetErrors)
{
RaiseExceptionEncountered(e, que.Value);
}
}
}
EnqueueSpecificPacket(pea);
}
else
{
}
}
catch (Exception ex)
{
if (!abort)
{
if (CrashOnException)
{
throw new InvalidPacketException(ex);
}
else
{
RaiseExceptionEncountered(ex, que.Value);
}
}
}
}
if (abort)
{
break;
}
}
}
if (!abort)
{
mreListener.Reset();
}
} while (!abort);
}
#endregion