protected override Nullable<Interop.WebSocket.Buffer> CreateBuffer(Nullable<ArraySegment<byte>> buffer)
{
Debug.Assert(buffer == null, "'buffer' MUST BE NULL.");
_webSocket.ThrowIfDisposed();
_webSocket.ThrowIfPendingException();
if (CloseStatus == WebSocketCloseStatus.Empty)
{
return null;
}
Interop.WebSocket.Buffer payloadBuffer = new Interop.WebSocket.Buffer();
if (CloseReason != null)
{
byte[] blob = Encoding.UTF8.GetBytes(CloseReason);
Debug.Assert(blob.Length <= WebSocketValidate.MaxControlFramePayloadLength,
"The close reason is too long.");
ArraySegment<byte> closeBuffer = new ArraySegment<byte>(blob, 0, Math.Min(WebSocketValidate.MaxControlFramePayloadLength, blob.Length));
_webSocket._internalBuffer.PinSendBuffer(closeBuffer, out _BufferHasBeenPinned);
payloadBuffer.CloseStatus.ReasonData = _webSocket._internalBuffer.ConvertPinnedSendPayloadToNative(closeBuffer);
payloadBuffer.CloseStatus.ReasonLength = (uint)closeBuffer.Count;
}
payloadBuffer.CloseStatus.CloseStatus = (ushort)CloseStatus;
return payloadBuffer;
}
}