m.Http.Backend.Tcp.WebSocketSession.ReadNextMessageAsync C# (CSharp) Method

ReadNextMessageAsync() public method

public ReadNextMessageAsync ( ) : Task
return Task
        public async Task<WebSocketMessage> ReadNextMessageAsync()
        {
            while (true)
            {
                OpCode opCode;
                byte[] payload;

                while (TryDecodeNextMessage(out opCode, out payload))
                {
                    if (closed)
                    {
                        throw new WebSocketException(string.Format("Session already closed (dropping received message:[{0}] payloadLength:[{1}])", opCode, payload.Length));
                    }

                    switch (opCode)
                    {
                        case OpCode.Text:
                            return new WebSocketMessage.Text(Encoding.UTF8.GetString(payload));

                        case OpCode.Binary:
                            return new WebSocketMessage.Binary(payload);

                        case OpCode.Close:
                            ushort statusCode;
                            string reason;
                            FrameDecoder.TryDecodeCloseReason(payload, out statusCode, out reason);
                            return new WebSocketMessage.Close(statusCode, reason);

                        case OpCode.Ping:
                            return new WebSocketMessage.Ping();

                        case OpCode.Pong:
                            return new WebSocketMessage.Pong();
                    }
                }

                int bytesRead;
                try
                {
                    bytesRead = await ReadToBufferAsync().ConfigureAwait(false);
                }
                catch (Exception e)
                {
                    throw new WebSocketException("Exception reading from websocket stream (server closed?)", e);
                }

                if (bytesRead > 0)
                {
                    onBytesReceived(bytesRead);
                    continue;
                }
                else
                {
                    throw new WebSocketException("Disconnected (client)");
                }
            }
        }