protected override void OnMessage() { _incomingBuffer = new ArraySegment <byte>(new byte[1024]); Ws.ReceiveAsync(_incomingBuffer, CancellationToken.None).GetAwaiter().OnCompleted(() => { try { if (Ws.State == WebSocketState.Closed) { return; } string response = Encoding.UTF8.GetString(_incomingBuffer); Console.WriteLine("res---->" + response); _update = JsonConvert.DeserializeObject <ExpandoObject>(response); if (_update == null) { return; } if (_update is ExpandoObject) { IDictionary <string, object> updateDictionary = (IDictionary <string, object>)_update; if (updateDictionary.ContainsKey("messageState")) { switch (updateDictionary["messageState"]) { case "saved": if (updateDictionary.ContainsKey("id")) { _messages.Last().id = (string)_update.id; } break; case "seen": _messages.Where(x => x.id == (string)_update.id).First().Seen = (bool)_update.seen; break; case "incoming": _messages.Add(new Message { Body = _update.body, From = _update.from, id = _update.id, MessageType = "text", Seen = false, To = _update.to, Token = _update.token }); break; } } } OnMessage(); } catch (Exception ex) { Console.WriteLine("Server Bad Response :" + ex.Message); } }); }
private async Task <string> Receive() { var array = new ArraySegment <byte>(new byte[256]); var result = await Ws.ReceiveAsync(array, cancel.Token); var res = Encoding.UTF8.GetString(array.Take(result.Count).ToArray()); return(res); }