// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime applicationLifetime) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } applicationLifetime.ApplicationStopping.Register(OnShutdown); WebSocketOptions opts = new WebSocketOptions() { KeepAliveInterval = TimeSpan.FromSeconds(120), ReceiveBufferSize = 4096 }; server.Initialize(); app.UseWebSockets(opts); app.Use(async(context, next) => { if (context.Request.Path == "/ws") { if (context.WebSockets.IsWebSocketRequest) { WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync().ConfigureAwait(false); //SocketJoin?.Invoke(context, webSocket); await server.HandleNewSocketAsync(context, webSocket).ConfigureAwait(false); } else { context.Response.StatusCode = 400; } } else { await next().ConfigureAwait(true); } }); app.UseHttpsRedirection(); app.UseRouting(); app.UseCors(opts => opts .AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader() ); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }