SanSYS

Untitled

Apr 29th, 2015
16,603
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.78 KB | None | 0 0
  1. private async Task ProcessWSChat(AspNetWebSocketContext context)
  2. {
  3.     // получаем класс, для работы с сокетом
  4.     WebSocket socket = context.WebSocket;
  5.  
  6.     // добавляем в список присоединённых клиентов
  7.     clients.Add(socket);
  8.  
  9.     bool isEnabled = true;
  10.  
  11.     while (isEnabled)
  12.     {
  13.         ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[1024]);
  14.  
  15.         // ожидаем сообщения
  16.         WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, CancellationToken.None);
  17.  
  18.         // если получено сообщение на закрытие канала
  19.         if (result.MessageType == WebSocketMessageType.Close)
  20.         {
  21.             // меняем флаг, для завершения цикла
  22.             isEnabled = false;
  23.  
  24.             // удаляем сокет из списка подключенных клиентов
  25.             clients.Remove(socket);
  26.         }
  27.         // иначе получены данные
  28.         else
  29.         {
  30.             // формируем текст сообщения
  31.             string userMessage = string.Format("You sent: {0} at {1:mm:ss.fff}", Encoding.UTF8.GetString(buffer.Array, 0, result.Count), DateTime.Now);
  32.  
  33.             byte[] messageBytes = Encoding.UTF8.GetBytes(userMessage);
  34.  
  35.             buffer = new ArraySegment<byte>(messageBytes);
  36.  
  37.             // отправляем всем активным клиентам
  38.             Parallel.ForEach(clients, p =>
  39.             {
  40.                 if (p.State == WebSocketState.Open)
  41.                 {
  42.                     p.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
  43.                 }
  44.             });
  45.         }
  46.     }
  47. }
Advertisement
Add Comment
Please, Sign In to add comment