コード例 #1
0
        public void Polled(Object source, IoEvent ioe)
        {
            Int32 eventSize = EstimateSize(ioe);
            Int32 currentCounter = Interlocked.Add(ref _counter, -eventSize);

            Debug.WriteLine(Thread.CurrentThread.Name + " state: " + _counter + " / " + _threshold);

            if (currentCounter < _threshold)
                Unblock();
        }
コード例 #2
0
        public void Execute(IoEvent ioe)
        {
            Boolean offeredEvent = _queueHandler.Accept(this, ioe);
            if (offeredEvent)
            {
                Execute(() =>
                {
                    _queueHandler.Polled(this, ioe);
                    ioe.Fire();
                });

                _queueHandler.Offered(this, ioe);
            }
        }
コード例 #3
0
        public override void FilterWrite(INextFilter nextFilter, IoSession session, IWriteRequest writeRequest)
        {
            IoEvent ioe = new IoEvent(IoEventType.Write, session, writeRequest);
            if (_queueHandler.Accept(this, ioe))
            {
                nextFilter.FilterWrite(session, writeRequest);
                IWriteFuture writeFuture = writeRequest.Future;
                if (writeFuture == null)
                    return;

                // We can track the write request only when it has a future.
                _queueHandler.Offered(this, ioe);
                writeFuture.Complete += (s, e) => _queueHandler.Polled(this, ioe);
            }
        }
コード例 #4
0
 public void Polled(Object source, IoEvent ioe)
 {
     // NOOP
 }
コード例 #5
0
 public void Offered(Object source, IoEvent ioe)
 {
     // NOOP
 }
コード例 #6
0
 public Boolean Accept(Object source, IoEvent ioe)
 {
     return true;
 }
コード例 #7
0
 private Int32 EstimateSize(IoEvent ioe)
 {
     Int32 size = _sizeEstimator.EstimateSize(ioe);
     if (size < 0)
         throw new InvalidOperationException(_sizeEstimator.GetType().Name + " returned "
                 + "a negative value (" + size + "): " + ioe);
     return size;
 }