Exemple #1
0
        public async Task InvokeAsync(HttpContext context)
        {
            // Only allow handshake on /ws
            if (context.Request.Path != "/ws")
            {
                await _next(context);

                return;
            }

            // Check if it's actually a WebSocket
            if (!context.WebSockets.IsWebSocketRequest)
            {
                _log.LogDebug("Skipping WebSocket handshake request, not an actual WebSocket");
                await _next(context);

                return;
            }

            // Check protocols
            var protocols  = context.WebSockets.WebSocketRequestedProtocols;
            var isFrontend = protocols.Contains("EliteAPI-app");
            var isPlugin   = protocols.Contains("EliteAPI-plugin");
            var isClient   = protocols.Contains("EliteAPI");


            if (isFrontend)
            {
                // Accept our frontend request
                _log.LogDebug("Accepting frontend WebSocket handshake");
                using var webSocket = await context.WebSockets.AcceptWebSocketAsync("EliteAPI-app");

                await _handler.Handle(webSocket, WebSocketType.FrontEnd);
            }

            else if (isPlugin)
            {
                // Accept our plugin request
                _log.LogDebug("Accepting plugin WebSocket handshake");
                using var webSocket = await context.WebSockets.AcceptWebSocketAsync("EliteAPI-plugin");

                await _handler.Handle(webSocket, WebSocketType.Plugin);
            }

            else if (isClient)
            {
                // Accept our client request
                _log.LogDebug("Accepting client WebSocket handshake");
                using var webSocket = await context.WebSockets.AcceptWebSocketAsync("EliteAPI");

                await _handler.Handle(webSocket, WebSocketType.Client);
            }

            else
            {
                _log.LogDebug("Bad WebSocket handshake request, bad protocol");
                context.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
            }
        }
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, WebSocketHandler webSocketHandler)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseWebSockets();

            app.Use(async(context, next) =>
            {
                if (context.WebSockets.IsWebSocketRequest)
                {
                    var webSocket = await context.WebSockets.AcceptWebSocketAsync();
                    webSocketHandler.Handle(webSocket);
                }
                else
                {
                    await next();
                }
            });

            app.UseMvcWithDefaultRoute();

            app.UseStaticFiles();
        }
Exemple #3
0
        public async Task Get()
        {
            if (HttpContext.WebSockets.IsWebSocketRequest)
            {
                WebSocket webSocket = await HttpContext.WebSockets.AcceptWebSocketAsync();

                await _webSocketHandler.Handle(Guid.NewGuid(), webSocket);

                //await SendMessages(webSocket);
            }
            else
            {
                HttpContext.Response.StatusCode = 400;
            }
        }