Beispiel #1
0
        internal async Task ReadFromWebSocket()
        {
            var buffer = ArrayPool <byte> .Shared.Rent(0x1000);

            try
            {
                var received = await WebSocket.ReceiveAsync(new ArraySegment <byte>(buffer), _requestAborted);

                while (!received.CloseStatus.HasValue)
                {
                    switch (received.MessageType)
                    {
                    case WebSocketMessageType.Text:
                        OnTextReceived?.Invoke(this,
                                               new TextMessageEventArgs(Encoding.UTF8.GetString(buffer, 0, received.Count),
                                                                        received.EndOfMessage));
                        break;

                    case WebSocketMessageType.Binary:
                        OnBinaryReceived?.Invoke(this,
                                                 new BinaryMessageEventArgs(new ArraySegment <byte>(buffer, 0, received.Count),
                                                                            received.EndOfMessage));
                        break;

                    case WebSocketMessageType.Close:
                        await WebSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "", _requestAborted);

                        break;
                    }

                    received = await WebSocket.ReceiveAsync(new ArraySegment <byte>(buffer), _requestAborted);
                }
            }
            catch (WebSocketException)
            {
            }
            catch (OperationCanceledException)
            {
            }
            finally
            {
                try
                {
                    if (!new [] { WebSocketState.Aborted, WebSocketState.Closed }.Contains(WebSocket.State))
                    {
                        await WebSocket.CloseAsync(WebSocketCloseStatus.InternalServerError, "", _requestAborted);
                    }
                }
                catch (WebSocketException) { }

                OnClosed?.Invoke(this, EventArgs.Empty);
                WebSocket.Dispose();
            }
        }
Beispiel #2
0
        internal async Task ReadFromWebSocket()
        {
            var buffer = new byte[0x1000];

            try
            {
                var received =
                    await WebSocket.ReceiveAsync(new ArraySegment <byte>(buffer), CancellationToken.None);

                while (!received.CloseStatus.HasValue)
                {
                    switch (received.MessageType)
                    {
                    case WebSocketMessageType.Text:
                        OnTextReceived?.Invoke(this,
                                               new TextMessageEventArgs(Encoding.UTF8.GetString(buffer, 0, received.Count),
                                                                        received.EndOfMessage));
                        break;

                    case WebSocketMessageType.Binary:
                        OnBinaryReceived?.Invoke(this,
                                                 new BinaryMessageEventArgs(new ArraySegment <byte>(buffer, 0, received.Count),
                                                                            received.EndOfMessage));
                        break;

                    case WebSocketMessageType.Close:
                        await WebSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "",
                                                   CancellationToken.None);

                        break;
                    }

                    received = await WebSocket.ReceiveAsync(new ArraySegment <byte>(buffer),
                                                            CancellationToken.None);
                }
            }
            catch (WebSocketException)
            {
            }
            finally
            {
                OnClosed?.Invoke(this, EventArgs.Empty);
                await WebSocket.CloseAsync(WebSocketCloseStatus.InternalServerError, "",
                                           CancellationToken.None);

                WebSocket.Dispose();
            }
        }
        private async void ReadFromWebSocket()
        {
            var buffer = new byte[0x2000];

            try
            {
                while (_ws.State == WebSocketState.Open)
                {
                    var received = await _ws.ReceiveAsync(new ArraySegment <byte>(buffer), CancellationToken.None);

                    switch (received.MessageType)
                    {
                    case WebSocketMessageType.Text:
                        OnTextReceived?.Invoke(this,
                                               new TextMessageEventArgs(Encoding.UTF8.GetString(buffer, 0, received.Count),
                                                                        received.EndOfMessage));
                        break;

                    case WebSocketMessageType.Binary:
                        OnBinaryReceived?.Invoke(this,
                                                 new BinaryMessageEventArgs(new ArraySegment <byte>(buffer, 0, received.Count),
                                                                            received.EndOfMessage));
                        break;

                    case WebSocketMessageType.Close:
                        await _ws.CloseAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None);

                        break;
                    }
                }
            }
            catch (WebSocketException)
            {
            }
            finally
            {
                OnClosed?.Invoke(this, EventArgs.Empty);
                _ws.Dispose();
            }
        }
Beispiel #4
0
 protected override void onBinaryReceived(Connection client, byte[] data)
 {
     OnBinaryReceived?.Invoke(client, data);
 }