Ejemplo n.º 1
0
        public void Slice()
        {
            CheckListener();

            lock (m_Queue.SyncRoot)
            {
                while (m_Queue.Count > 0)
                {
                    NetState ns = (NetState)m_Queue.Dequeue();

                    if (ns.Running)
                    {
                        if (HandleReceive(ns) && ns.Running)
                        {
                            ns.Continue();
                        }
                    }
                }

                while (m_Throttled.Count > 0)
                {
                    m_Queue.Enqueue(m_Throttled.Dequeue());
                }
            }
        }
Ejemplo n.º 2
0
        private void HandlePending()
        {
            lock ( m_PendingQueue )
            {
                while (m_PendingQueue.Count > 0)
                {
                    NetState ns = m_PendingQueue.Dequeue();

                    if (ns.Running)
                    {
                        ByteQueue buffer   = ns.Buffer;
                        bool      throttle = false;

                        if (buffer != null && buffer.Length > 0)
                        {
                            lock ( buffer )
                            {
                                InvokeReceived(ns, buffer, out throttle);
                            }
                        }

                        if (ns.Running)
                        {
                            if (throttle)
                            {
                                m_ThrottledQueue.Enqueue(ns);
                            }
                            else
                            {
                                ns.Continue();
                            }
                        }
                    }
                }

                while (m_ThrottledQueue.Count > 0)
                {
                    m_PendingQueue.Enqueue(m_ThrottledQueue.Dequeue());
                }
            }
        }