Esempio n. 1
0
        public override async Task HandleRequestAsync(IHttpContext context)
        {
            if (context.IsHandled)
            {
                return;
            }

            if (!context.Request.IsWebSocketRequest)
            {
                return;
            }

            var absolutePath = context.Request.Url.AbsolutePath;
            var socket       = webSockets.FirstOrDefault(f => f.Route == absolutePath);

            if (socket == null)
            {
                context.Response.StatusCode = (int)HttpStatusCode.NotFound;
                context.Close();
                return;
            }

            if (!socket.IsInstanceGenerated)
            {
                throw new NullReferenceException($"{socket.SocketType.Name} is null reference");
            }

            if (socket.Instance != null)
            {
                var httpListenerWebSocketContext = await context.AcceptWebSocketRequest();

                socket.Instance.Invoke(WebSocketConstants.OnBeforeConnectedMethod, BindingFlags.Instance | BindingFlags.NonPublic, new[] { httpListenerWebSocketContext });
            }
        }