Ejemplo n.º 1
0
        //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;
                }
            }
        }
Ejemplo n.º 2
0
        /// <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);
                    }
                }
            }
        }
Ejemplo n.º 3
0
 private void ClearQueue()
 {
     lock (_socket) {
         while (_results.Count > 0)
         {
             IQueueEventListener el = _results.Dequeue() as IQueueEventListener;
             if (el != null)
             {
                 el.Dequeued();
             }
         }
     }
 }
Ejemplo n.º 4
0
 /// <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);
             }
         }
     }
 }