Ejemplo n.º 1
0
        /// <summary>
        /// Starts listening the socket
        /// </summary>
        /// <returns>The task that listens to the <see cref="WebSocket"/></returns>
        private void GetResponse()
        {
            var buffer = new byte[2048];

            while (true)
            {
                if (_closed)
                {
                    return;
                }

                var endOfMessage = false;
                var response     = string.Empty;

                while (!endOfMessage)
                {
                    var socketTask = WebSocket.ReceiveAsync(new ArraySegment <byte>(buffer), CancellationToken.None);

                    Task.WhenAny(_connectionCloseTask.Task, socketTask).GetAwaiter();

                    if (_closed)
                    {
                        return;
                    }

                    var result = socketTask.Result;

                    switch (result.MessageType)
                    {
                    case WebSocketMessageType.Text:
                        response += Encoding.UTF8.GetString(buffer, 0, result.Count);
                        break;

                    case WebSocketMessageType.Close:
                        Close();
                        return;
                    }

                    endOfMessage = result.EndOfMessage;
                }

                if (string.IsNullOrEmpty(response))
                {
                    continue;
                }

                //System.IO.File.AppendAllText("d:\\tracekees.txt", response + Environment.NewLine);

                CheckForError(response);

                var messageBase = MessageBase.FromJson(response);

                if (_messageId == messageBase.Id)
                {
                    _response.SetResult(response);
                }

                MessageReceived?.Invoke(this, response);
            }
        }
Ejemplo n.º 2
0
        private void Websocket_OnMessage(object sender, MessageEventArgs e)
        {
            var response = e.Data;

            CheckForError(response);

            var messageBase = MessageBase.FromJson(response);

            if (_messageId == messageBase.Id)
            {
                _response.SetResult(response);
            }

            MessageReceived?.Invoke(this, response);
        }