Exemplo n.º 1
0
        /// <summary>
        ///     Serialize message and add it to the buffer
        /// </summary>
        /// <param name="args">Socket buffer</param>
        public void Send(SocketBuffer args)
        {
            if (!_headerIsSent)
            {
                if (!_headerCreated)
                {
                    var headerLength = CreateHeader(out _contentLength);
                    _headerStream.Position = _contentStream.Position = 0;
                    _headerCreated         = true;
                    _bytesLeftToSend       = headerLength;
                }

                if (_headerStream.CurrentBlockCapacity == 0)
                {
                    _headerStream.MoveNext();
                }
                var toWrite = Math.Min(NetworkingSettings.BufferSize,
                                       Math.Min(_headerStream.CurrentBlockCapacity, _bytesLeftToSend));
                args.SetBuffer(_headerStream.CurrentBlock, _headerStream.CurrentBlockOffset, toWrite);
                _headerStream.Position += toWrite;
            }
            else
            {
                if (_contentStream.CurrentBlockCapacity == 0)
                {
                    _contentStream.MoveNext();
                }
                var toWrite = Math.Min(NetworkingSettings.BufferSize,
                                       Math.Min(_contentStream.CurrentBlockCapacity, _bytesLeftToSend));
                args.SetBuffer(_contentStream.CurrentBlock, _contentStream.CurrentBlockOffset, toWrite);
                _contentStream.Position += toWrite;
            }
        }