private async Task Play(HttpContext context, WebSocket webSocket) { string userName = context.Request.Query["userName"]; webSockets.Add(userName, webSocket); var buffer = new byte[1024 * 4]; WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment <byte>(buffer), CancellationToken.None); while (!result.CloseStatus.HasValue) { string reqString = Encoding.UTF8.GetString(buffer); MessageReq msgReq = JsonConvert.DeserializeObject <MessageReq>(reqString); if (string.IsNullOrEmpty(msgReq.To)) { await sendToEveryOneAsync(msgReq.GetBytes(), result); } else { await sendToPersonAsync(msgReq.GetBytes(), result, msgReq.To); } result = await webSocket.ReceiveAsync(new ArraySegment <byte>(buffer), CancellationToken.None); } await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None); webSockets.Remove(userName); }