public PrefixedReadonlyListEnumerator([NotNull] PrefixedReadonlyList <T> list) { if (list == null) { throw new ArgumentNullException("list"); } this._index = -1; this._list = list; }
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); } } }