From 627b0481445f1502ac7a7d2236bdc0f5f56bd434 Mon Sep 17 00:00:00 2001 From: Pete Chown Date: Wed, 14 Sep 2022 18:05:16 +0100 Subject: [PATCH] Resolve warnings and use features from .NET 6. --- Program.cs | 138 +++++++++++++++++++++++-------------------------- kestrel.csproj | 2 + 2 files changed, 67 insertions(+), 73 deletions(-) diff --git a/Program.cs b/Program.cs index 81d1536..4d039d4 100644 --- a/Program.cs +++ b/Program.cs @@ -1,96 +1,88 @@ -using System; -using System.Net.WebSockets; +using System.Net.WebSockets; using System.Text; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting.Server; -using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Server.Kestrel.Core; using Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets; using Microsoft.AspNetCore.WebSockets; -using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; using Microsoft.Extensions.Primitives; -namespace Kestrel +namespace Kestrel; + +class Context { - class Context - { - public IFeatureCollection features; + public IFeatureCollection features; - public Context(IFeatureCollection features) - { - this.features = features; - } + public Context(IFeatureCollection features) + { + this.features = features; + } +} + +class Application : IHttpApplication +{ + private readonly WebSocketMiddleware wsMiddleware; + + public Application(ILoggerFactory loggerFactory) + { + var wsOptions = new WebSocketOptions(); + wsMiddleware = new WebSocketMiddleware(ContinueRequest, new OptionsWrapper(wsOptions), + loggerFactory); } - class Application : IHttpApplication + public Context CreateContext(IFeatureCollection contextFeatures) { - private WebSocketMiddleware wsMiddleware; - - public Application(ILoggerFactory loggerFactory) - { - var wsOptions = new WebSocketOptions(); - wsMiddleware = new WebSocketMiddleware(continueRequest, new OptionsWrapper(wsOptions), - loggerFactory); - } - - public Context CreateContext(IFeatureCollection contextFeatures) - { - return new Context(contextFeatures); - } - - public void DisposeContext(Context context, Exception exception) - { - } - - public async Task ProcessRequestAsync(Context context) - { - HttpContext httpContext = new DefaultHttpContext(context.features); - await wsMiddleware.Invoke(httpContext); - } - - private async Task continueRequest(HttpContext httpContext) - { - if (httpContext.WebSockets.IsWebSocketRequest) - { - var socket = await httpContext.WebSockets.AcceptWebSocketAsync(); - var message = Encoding.ASCII.GetBytes("hello world"); - await socket.SendAsync(new ArraySegment(message), WebSocketMessageType.Text, true, - CancellationToken.None); - - await socket.ReceiveAsync(new byte[4096], CancellationToken.None); - } - else - { - httpContext.Response.Headers.Add("Content-Type", new StringValues("text/plain")); - await httpContext.Response.Body.WriteAsync(Encoding.ASCII.GetBytes("hello world")); - } - } + return new Context(contextFeatures); } - class Program + public void DisposeContext(Context context, Exception? exception) { - static async Task Main(string[] args) + } + + public async Task ProcessRequestAsync(Context context) + { + HttpContext httpContext = new DefaultHttpContext(context.features); + await wsMiddleware.Invoke(httpContext); + } + + private async Task ContinueRequest(HttpContext httpContext) + { + if (httpContext.WebSockets.IsWebSocketRequest) { - var serverOptions = new KestrelServerOptions(); - serverOptions.ListenAnyIP(8080); + var socket = await httpContext.WebSockets.AcceptWebSocketAsync(); + var message = Encoding.ASCII.GetBytes("hello world"); + await socket.SendAsync(new ArraySegment(message), WebSocketMessageType.Text, true, + CancellationToken.None); - var transportOptions = new SocketTransportOptions(); - var loggerFactory = new NullLoggerFactory(); - - var transportFactory = new SocketTransportFactory( - new OptionsWrapper(transportOptions), loggerFactory); - - using (var server = new KestrelServer(new OptionsWrapper(serverOptions), - transportFactory, loggerFactory)) - { - await server.StartAsync(new Application(loggerFactory), CancellationToken.None); - Console.ReadLine(); - } + await socket.ReceiveAsync(new byte[4096], CancellationToken.None); + } + else + { + httpContext.Response.Headers.Add("Content-Type", new StringValues("text/plain")); + await httpContext.Response.Body.WriteAsync(Encoding.ASCII.GetBytes("hello world\n")); } } } + +class Program +{ + static async Task Main() + { + var serverOptions = new KestrelServerOptions(); + serverOptions.ListenAnyIP(8080); + + var transportOptions = new SocketTransportOptions(); + var loggerFactory = new NullLoggerFactory(); + + var transportFactory = new SocketTransportFactory( + new OptionsWrapper(transportOptions), loggerFactory); + + using var server = new KestrelServer( + new OptionsWrapper(serverOptions), transportFactory, loggerFactory); + + await server.StartAsync(new Application(loggerFactory), CancellationToken.None); + Console.ReadLine(); + } +} diff --git a/kestrel.csproj b/kestrel.csproj index df5d510..84f8d49 100644 --- a/kestrel.csproj +++ b/kestrel.csproj @@ -2,6 +2,8 @@ net6.0 + enable + enable \ No newline at end of file