Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private async Task ProcessWSChat(AspNetWebSocketContext context)
- {
- // получаем класс, для работы с сокетом
- WebSocket socket = context.WebSocket;
- // добавляем в список присоединённых клиентов
- clients.Add(socket);
- bool isEnabled = true;
- while (isEnabled)
- {
- ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[1024]);
- // ожидаем сообщения
- WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, CancellationToken.None);
- // если получено сообщение на закрытие канала
- if (result.MessageType == WebSocketMessageType.Close)
- {
- // меняем флаг, для завершения цикла
- isEnabled = false;
- // удаляем сокет из списка подключенных клиентов
- clients.Remove(socket);
- }
- // иначе получены данные
- else
- {
- // формируем текст сообщения
- string userMessage = string.Format("You sent: {0} at {1:mm:ss.fff}", Encoding.UTF8.GetString(buffer.Array, 0, result.Count), DateTime.Now);
- byte[] messageBytes = Encoding.UTF8.GetBytes(userMessage);
- buffer = new ArraySegment<byte>(messageBytes);
- // отправляем всем активным клиентам
- Parallel.ForEach(clients, p =>
- {
- if (p.State == WebSocketState.Open)
- {
- p.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
- }
- });
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment