//Pop the data from the queue private DataFragment Dequeue() { lock (_socket) { object t = _results.Dequeue(); Debug.Assert(t != null); IQueueEventListener el = t as IQueueEventListener; if (el != null) { el.Dequeued(); } DataFragment d = t as DataFragment; if (d != null) { return(d); } else { Exception e = t as Exception; Debug.Assert(e != null); throw e; } } }
/// <summary> /// Wait until the next response has been received. /// </summary> /// <returns>a packet received</returns> public DataFragment WaitResponse() { lock (_sync) { while (true) { if (_queue.Count > 0) { object t = _queue.Dequeue(); IQueueEventListener el = t as IQueueEventListener; if (el != null) { el.Dequeued(false); } DataFragment d = t as DataFragment; if (d != null) { return(d); } Exception e = t as Exception; if (e != null) { ClearQueue(); throw e; } } else { Monitor.Wait(_sync); } } } }
private void ClearQueue() { lock (_socket) { while (_results.Count > 0) { IQueueEventListener el = _results.Dequeue() as IQueueEventListener; if (el != null) { el.Dequeued(); } } } }
/// <summary> /// Clear queue /// </summary> private void ClearQueue() { lock (_sync) { while (_queue.Count > 0) { object t = _queue.Dequeue(); IQueueEventListener el = t as IQueueEventListener; if (el != null) { el.Dequeued(true); } } } }