Example #1
0
        public void Configure(
            IApplicationBuilder app,
            IWebHostEnvironment env,
            IWebSocketHandler webSocketHandler,
            IServiceScopeFactory serviceScopeFactory
            )
        {
            _webSocketHandler = webSocketHandler;

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseSwagger();
                app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Communicator v1"));
            }

            app.UseHttpsRedirection();

            app.UseRouting();

            app.UseAuthorization();

            app.UseSession();

            app.UseWebSockets();
            app.Use(async(context, next) =>
            {
                if (context.Request.Path == "/ws")
                {
                    if (context.WebSockets.IsWebSocketRequest)
                    {
                        using var scope     = serviceScopeFactory.CreateScope();
                        var db              = scope.ServiceProvider.GetService <CommunicatorDbContex>();
                        WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync();
                        await _webSocketHandler.Handle(context.Session, webSocket, new Service(db));
                    }
                    else
                    {
                        context.Response.StatusCode = 400;
                    }
                }
                else
                {
                    await next();
                }
            });

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }