Ejemplo n.º 1
0
        public void process()
        {
            int t_wpos = Interlocked.Add(ref _wpos, 0);

            if (_rpos < t_wpos)
            {
                if (_networkInterface.fileter() != null)
                {
                    _networkInterface.fileter().recv(messageReader, _buffer, (UInt32)_rpos, (UInt32)(t_wpos - _rpos));
                }
                else
                {
                    messageReader.process(_buffer, (UInt32)_rpos, (UInt32)(t_wpos - _rpos));
                }

                Interlocked.Exchange(ref _rpos, t_wpos);
            }
            else if (t_wpos < _rpos)
            {
                if (_networkInterface.fileter() != null)
                {
                    _networkInterface.fileter().recv(messageReader, _buffer, (UInt32)_rpos, (UInt32)(_buffer.Length - _rpos));
                    _networkInterface.fileter().recv(messageReader, _buffer, (UInt32)0, (UInt32)t_wpos);
                }
                else
                {
                    messageReader.process(_buffer, (UInt32)_rpos, (UInt32)(_buffer.Length - _rpos));
                    messageReader.process(_buffer, (UInt32)0, (UInt32)t_wpos);
                }

                Interlocked.Exchange(ref _rpos, t_wpos);
            }
            else
            {
                // 没有可读数据
            }
        }