示例#1
0
        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);
        }