public LinkedListNode<SendParameters> Peek(LinkedList<SendParameters> list, DropRealTimeChunks drop)
                {
                    lock (this) {
                        if (this.m_Queue.Count > 0) {

                            LinkedListNode<SendParameters> node = (LinkedListNode<SendParameters>)this.m_Queue.Peek();

                            if (node.Value.Tags.Priority != MessagePriority.RealTime) {
                                //If item is not real-time, we're done.
                            }
                            else if ((drop == DropRealTimeChunks.Sometimes) &&
                                    (this.m_Queue.Count >= DROP_REALTIME_THRESHOLD) &&
                                    (m_NonRealTimeChunkCount > 0)) {
                                //Here we drop real-time items when we are over a queue length
                                //threshold, but only if there is at least one
                                //non-real-time item in the queue.
                                while (node.Value.Tags.Priority == MessagePriority.RealTime) {
                                    Trace.WriteLine("Dropping Real-Time Chunk", this.GetType().ToString());
                                    node = (LinkedListNode<SendParameters>)m_Queue.Dequeue();
                                    list.Remove(node);
                                    node = (LinkedListNode<SendParameters>)m_Queue.Peek();
                                }
                            }
                            else if (drop == DropRealTimeChunks.Always) {
                                //Here we drop real-time items unconditionally until we come to
                                //a non-real-time item, or until the queue is empty.
                                while (node.Value.Tags.Priority == MessagePriority.RealTime) {
                                    Trace.WriteLine("Dropping Real-Time Chunk", this.GetType().ToString());
                                    node = (LinkedListNode<SendParameters>)m_Queue.Dequeue();
                                    list.Remove(node);
                                    if (m_Queue.Count > 0) {
                                        node = (LinkedListNode<SendParameters>)m_Queue.Peek();
                                    }
                                    else {
                                        node = null;
                                        break;
                                    }
                                }
                            }
                            return node;
                        }
                    }
                    return null;
                }
Example #2
0
                public LinkedListNode <SendParameters> Peek(LinkedList <SendParameters> list, DropRealTimeChunks drop)
                {
                    lock (this) {
                        if (this.m_Queue.Count > 0)
                        {
                            LinkedListNode <SendParameters> node = (LinkedListNode <SendParameters>) this.m_Queue.Peek();

                            if (node.Value.Tags.Priority != MessagePriority.RealTime)
                            {
                                //If item is not real-time, we're done.
                            }
                            else if ((drop == DropRealTimeChunks.Sometimes) &&
                                     (this.m_Queue.Count >= DROP_REALTIME_THRESHOLD) &&
                                     (m_NonRealTimeChunkCount > 0))
                            {
                                //Here we drop real-time items when we are over a queue length
                                //threshold, but only if there is at least one
                                //non-real-time item in the queue.
                                while (node.Value.Tags.Priority == MessagePriority.RealTime)
                                {
                                    Trace.WriteLine("Dropping Real-Time Chunk", this.GetType().ToString());
                                    node = (LinkedListNode <SendParameters>)m_Queue.Dequeue();
                                    list.Remove(node);
                                    node = (LinkedListNode <SendParameters>)m_Queue.Peek();
                                }
                            }
                            else if (drop == DropRealTimeChunks.Always)
                            {
                                //Here we drop real-time items unconditionally until we come to
                                //a non-real-time item, or until the queue is empty.
                                while (node.Value.Tags.Priority == MessagePriority.RealTime)
                                {
                                    Trace.WriteLine("Dropping Real-Time Chunk", this.GetType().ToString());
                                    node = (LinkedListNode <SendParameters>)m_Queue.Dequeue();
                                    list.Remove(node);
                                    if (m_Queue.Count > 0)
                                    {
                                        node = (LinkedListNode <SendParameters>)m_Queue.Peek();
                                    }
                                    else
                                    {
                                        node = null;
                                        break;
                                    }
                                }
                            }
                            return(node);
                        }
                    }
                    return(null);
                }