Пример #1
0
 public WebSocketServerMiddleware(RequestDelegate _next,
                                  WebSocketServerConnectionManager _manager)
 {
     this._next    = _next;
     this._manager = _manager;
     this._notify  = new WebSocketNotifyManager();
 }
Пример #2
0
        public async Task ManageSocket(HttpContext context, WebSocket webSocket, WebSocketServerConnectionManager _manager)
        {
            // добавить веб сокет в список
            string ConnID = _manager.AddSocket(webSocket);

            // отправить ID клиенту
            await _manager.SendConnIDAsync(webSocket, ConnID);

            // полученное сообщение
            result = await webSocket.ReceiveAsync(new ArraySegment <byte>(buffer), CancellationToken.None);

            // если клиент просит закрыть соединение
            if (result.MessageType == WebSocketMessageType.Close)
            {
                // получение соответ. ID из списка
                string id = _manager.GetAllSockets().FirstOrDefault(s => s.Value == webSocket).Key;

                Console.WriteLine($"Receive->Close");

                // удалене веб соккета из списка
                _manager.GetAllSockets().TryRemove(id, out WebSocket sock);

                Console.WriteLine("Managed Connections: " + _manager.GetAllSockets().Count.ToString());

                await sock.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None);

                return;
            }
        }
Пример #3
0
        // функционал чата
        public async Task RouteJSONMessageAsync(string message, WebSocketServerConnectionManager _manager)
        {
            // изменения JSON в объект
            var routeOb = JsonConvert.DeserializeObject <dynamic>(message);

            // если есть получатель
            if (Guid.TryParse(routeOb.To.ToString(), out Guid guidOutput))
            {
                Console.WriteLine("Targeted");

                // поиск получателя в списке
                var sock = _manager.GetAllSockets().FirstOrDefault(s => s.Key == routeOb.To.ToString());

                // если есть
                if (sock.Value != null)
                {
                    if (sock.Value.State == WebSocketState.Open)
                    {
                        await sock.Value.SendAsync(Encoding.UTF8.GetBytes(routeOb.Message.ToString()), WebSocketMessageType.Text, true, CancellationToken.None);
                    }
                }
                // если нет
                else
                {
                    Console.WriteLine("Invalid Recipient");
                }
            }
            // если нет отправить всем
            else
            {
                Console.WriteLine("Broadcast");

                foreach (var sock in _manager.GetAllSockets())
                {
                    if (sock.Value.State == WebSocketState.Open)
                    {
                        await sock.Value.SendAsync(Encoding.UTF8.GetBytes(routeOb.Message.ToString()), WebSocketMessageType.Text, true, CancellationToken.None);
                    }
                }
            }
        }
Пример #4
0
 public OrdersController(WebSocketServerConnectionManager manager, IOrderService orderService)
 {
     _manager      = manager;
     _orderService = orderService;
 }
Пример #5
0
 public FriendsOp(RequestDelegate next, WebSocketServerConnectionManager manager)
 {
     _next    = next;
     _manager = manager;
 }
Пример #6
0
 // manager shoudl send new message on new user.
 public WebSocketServerMiddleware(RequestDelegate next, WebSocketServerConnectionManager manager)
 {
     _next    = next;
     _manager = manager;
 }
Пример #7
0
        // рассылка сообщений
        public async Task ManageChat(WebSocketReceiveResult result, byte[] buffer, WebSocket webSocket, WebSocketServerConnectionManager _manager, ChatMan _chatManager)
        {
            while (!result.CloseStatus.HasValue)
            {
                // отправка
                await _chatManager.RouteJSONMessageAsync(Encoding.UTF8.GetString(buffer, 0, result.Count), _manager);

                // ожидание нового сообщения от клиента
                result = await webSocket.ReceiveAsync(new ArraySegment <byte>(buffer), CancellationToken.None);
            }
        }