コード例 #1
0
 public PrefixedReadonlyListEnumerator([NotNull] PrefixedReadonlyList <T> list)
 {
     if (list == null)
     {
         throw new ArgumentNullException("list");
     }
     this._index = -1;
     this._list  = list;
 }
コード例 #2
0
        public async Task WriteResponseMessageAsync([NotNull] IClientConnectionInfo connectionInfo,
                                                    [NotNull] TcpMessage responseMessage)
        {
            if (connectionInfo == null)
            {
                throw new ArgumentNullException("connectionInfo");
            }
            if (responseMessage == null)
            {
                throw new ArgumentNullException("responseMessage");
            }

            ArraySegment <byte>?headerBuffer = null;

            try
            {
                headerBuffer = this._headerBufferManager.CheckOutSegment();
                responseMessage.Header.Write(headerBuffer.Value.Array, headerBuffer.Value.Offset);
                // объединение буферов заголовка и тела сообщения в один список, чтобы буфер заголовка не отправлялся в отдельном сетевом пакете
                PrefixedReadonlyList <ArraySegment <byte> > mergedBuffers = new PrefixedReadonlyList <ArraySegment <byte> >(headerBuffer.Value, responseMessage.BodyBuffers);
                int      totalMessageSize       = responseMessage.Header.Size + TcpMessageHeader.HeaderSize;
                TimeSpan responseSendingTimeout = this._сonfiguration.GetResponseSendingTimeout(responseMessage.Header.Command);

                using (BufferReadStream responseStream = new BufferReadStream(mergedBuffers, totalMessageSize))
                {
                    responseStream.BufferedCopyTo(connectionInfo.Stream, totalMessageSize, responseSendingTimeout);
                }
            }
            finally
            {
                if (headerBuffer != null)
                {
                    this._headerBufferManager.CheckIn(headerBuffer.Value);
                }
            }
        }