示例#1
0
        public void ReceiveMessages()
        {
            while (_socket.Available > 0)
            {
                var size = Math.Min(_buffer.Length - _received, _socket.Available);

                _received += _socket.Receive(_buffer, _received, size, SocketFlags.None);

                var offset = 0;
                while (MsgSerializer.CheckBufferForMsg(_buffer, _received, offset, out var msgSize, out var msgId))
                {
                    ReadMsg(msgId, _buffer, offset);
                    offset += msgSize;
                    _receiveTimer.Restart();
                }

                Array.Copy(_buffer, offset, _buffer, 0, _received - offset);
                _received -= offset;

                if (_received >= _buffer.Length)
                {
                    throw new MsgPipeException("Failed to receive message: buffer too small");
                }
            }
        }