예제 #1
0
        private void Read(byte[] buffer)
        {
            if (!IsAvailable)
            {
                return;
            }

            Socket.Receive(buffer, r =>
            {
                if (r <= 0)
                {
                    Logger.Debug("0 bytes read. Closing.");
                    CloseSocket();
                    return;
                }

                Logger.Debug(r + " bytes read");

                var readBytes = buffer.Take(r);
                if (SocketHandler != null)
                {
                    SocketHandler.Receive(readBytes);
                }

                Read(buffer);
            },
                           HandleReadError, 0);
        }
예제 #2
0
        private async Task Receive(WebSocket socket)
        {
            while (socket.State == WebSocketState.Open)
            {
                var result = await socket.ReceiveAsync(BufferSize._4096.GetArraySegment(out var buffer), CancellationToken.None);

                var payload = result.GetContent(buffer);

                if (result.MessageType == WebSocketMessageType.Text)
                {
                    await _socketHandler.Receive(socket, payload);
                }
                else if (result.MessageType == WebSocketMessageType.Close)
                {
                    await _socketHandler.OnDisconnected(socket);
                }
            }
        }