System.Net.WebSockets.WebSocketHttpListenerDuplexStream.HttpListenerAsyncEventArgs.UpdateDataChunk C# (CSharp) Method

UpdateDataChunk() private method

private UpdateDataChunk ( ) : void
return void
            private unsafe void UpdateDataChunk()
            {
                if (_dataChunks == null)
                {
                    _dataChunks = new Interop.HttpApi.HTTP_DATA_CHUNK[2];
                    _dataChunksGCHandle = GCHandle.Alloc(_dataChunks, GCHandleType.Pinned);
                    _dataChunks[0] = new Interop.HttpApi.HTTP_DATA_CHUNK();
                    _dataChunks[0].DataChunkType = Interop.HttpApi.HTTP_DATA_CHUNK_TYPE.HttpDataChunkFromMemory;
                    _dataChunks[1] = new Interop.HttpApi.HTTP_DATA_CHUNK();
                    _dataChunks[1].DataChunkType = Interop.HttpApi.HTTP_DATA_CHUNK_TYPE.HttpDataChunkFromMemory;
                }

                Debug.Assert(_buffer == null || _bufferList == null, "Either 'm_Buffer' or 'm_BufferList' MUST be NULL.");
                Debug.Assert(_shouldCloseOutput || _buffer != null || _bufferList != null, "Either 'm_Buffer' or 'm_BufferList' MUST NOT be NULL.");

                // The underlying byte[] m_Buffer or each m_BufferList[].Array are pinned already 
                if (_buffer != null)
                {
                    UpdateDataChunk(0, _buffer, _offset, _count);
                    UpdateDataChunk(1, null, 0, 0);
                    _dataChunkCount = 1;
                }
                else if (_bufferList != null)
                {
                    Debug.Assert(_bufferList != null && _bufferList.Count == 2,
                        "'m_BufferList' MUST NOT be NULL and have exactly '2' items at this point.");
                    UpdateDataChunk(0, _bufferList[0].Array, _bufferList[0].Offset, _bufferList[0].Count);
                    UpdateDataChunk(1, _bufferList[1].Array, _bufferList[1].Offset, _bufferList[1].Count);
                    _dataChunkCount = 2;
                }
                else
                {
                    Debug.Assert(_shouldCloseOutput, "'m_ShouldCloseOutput' MUST be 'true' at this point.");
                    _dataChunks = null;
                }
            }

Same methods

WebSocketHttpListenerDuplexStream.HttpListenerAsyncEventArgs::UpdateDataChunk ( int index, byte buffer, int offset, int count ) : void