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(); } }
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(); } }
protected override void onBinaryReceived(Connection client, byte[] data) { OnBinaryReceived?.Invoke(client, data); }