/// <summary> /// Return all items in the queue for the given socket, and remove them from the queue. /// Return null if there are no enqueued items for this socket. /// </summary> /// <param name="socket"></param> /// <returns></returns> public SocketSendParameters[] DequeueAll(Socket socket, Guid currentSlide) { lock (this) { if (m_QueueList.ContainsKey(socket)) { SocketQueue sq = ((SocketQueue)m_QueueList[socket]); ArrayList l = new ArrayList(); SocketSendParameters ssp = null; while (true) { ssp = sq.Dequeue(currentSlide); if (ssp == null) { break; } l.Add(ssp); } if (l.Count == 0) { return(null); } return((SocketSendParameters[])l.ToArray(typeof(SocketSendParameters))); } } return(null); }
/// <summary> /// Get the next item from the queue which is not in the provided exclusion list. /// Return null if the queue is empty or if there are no qualifying items. /// </summary> /// <returns></returns> public SocketSendParameters Dequeue(Hashtable exclusionList, Guid currentSlide) { lock (this) { SocketQueue bestSocketQueue = null; SocketSendParameters bestMessage = null; foreach (SocketQueue sq in m_QueueList.Values) { if (((exclusionList.ContainsKey(sq.Socket)) && (((ReferenceCounter)exclusionList[sq.Socket]).IsZero)) || (!exclusionList.ContainsKey(sq.Socket))) { SocketSendParameters thisSp = sq.Peek(currentSlide); if (thisSp != null) { if (thisSp.CompareTo(bestMessage, currentSlide) < 0) { bestMessage = thisSp; bestSocketQueue = sq; } } } } if (bestSocketQueue != null) { //Trace.WriteLine("Dequeue: best message tag: " + bestMessage.Tags.SlideID.ToString() + // "; current slide=" + currentSlide.ToString() + // "; seq number=" + bestMessage.SequenceNumber.ToString(), this.GetType().ToString()); return(bestSocketQueue.Dequeue(currentSlide)); } } return(null); }
public void Enqueue(SocketSendParameters sp) { lock (this) { LinkedListNode <SocketSendParameters> node = new LinkedListNode <SocketSendParameters>(sp); m_List.AddLast(node); if (!m_SlideQueues.ContainsKey(sp.Tags.SlideID)) { m_SlideQueues.Add(sp.Tags.SlideID, new SlideQueue()); } ((SlideQueue)m_SlideQueues[sp.Tags.SlideID]).Enqueue(node); } }
/// <summary> /// Set the SequenceNumber property for the specified item, then enqueue it. /// </summary> /// <param name="sp"></param> public void Enqueue(SocketSendParameters sp) { lock (this) { sp.SequenceNumber = m_NextSequenceNumber; m_NextSequenceNumber++; if (m_QueueList.ContainsKey(sp.Socket)) { ((SocketQueue)m_QueueList[sp.Socket]).Enqueue(sp); } else { SocketQueue sq = new SocketQueue(sp.Socket); sq.Enqueue(sp); m_QueueList.Add(sp.Socket, sq); } //Trace.WriteLine("Enqueue guid=" + sp.Tags.SlideID.ToString() + "; seq =" + sp.SequenceNumber.ToString(), this.GetType().ToString()); } }
public void Enqueue(SocketSendParameters sp) { lock (this) { LinkedListNode<SocketSendParameters> node = new LinkedListNode<SocketSendParameters>(sp); m_List.AddLast(node); if (!m_SlideQueues.ContainsKey(sp.Tags.SlideID)) m_SlideQueues.Add(sp.Tags.SlideID, new SlideQueue()); ((SlideQueue)m_SlideQueues[sp.Tags.SlideID]).Enqueue(node); } }