ArtemisComm.PacketProcessing.QueueToPacketProcessor C# (CSharp) Method

QueueToPacketProcessor() static private method

static private QueueToPacketProcessor ( ) : void
return void
        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