Beispiel #1
0
 public static IncomingMessage ToIncomingMessage(this MessageEnvelope envelope, XdrBufferFactory.RentedBuffer rentedBuffer)
 {
     using var writer = new XdrBufferWriter(rentedBuffer.Buffer);
     return(envelope.ToIncomingMessage(writer));
 }
Beispiel #2
0
        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);
        }