public static IncomingMessage ToIncomingMessage(this MessageEnvelope envelope, XdrBufferFactory.RentedBuffer rentedBuffer) { using var writer = new XdrBufferWriter(rentedBuffer.Buffer); return(envelope.ToIncomingMessage(writer)); }
public static async Task <WebSocketMessageType> GetWebsocketBuffer(this WebSocket webSocket, XdrBufferFactory.RentedBuffer messageBuffer, CancellationToken cancellationToken) { var length = 0; var messageType = default(WebSocketMessageType); while (true) { if (length + ChunkSize > messageBuffer.Capacity) { throw new Exception("Too large message"); //TODO: handle it upstream } var chunk = messageBuffer.AsSegment(length, ChunkSize); var result = await webSocket.ReceiveAsync(chunk, cancellationToken); length += result.Count; if (result.EndOfMessage) { messageType = result.MessageType; break; } } messageBuffer.Resize(length); return(messageType); }