Don't use ApplicationLifetime because it's in a .Internal namespace.
The code now uses IApplicationLifetime and implements the methods.
This commit is contained in:
34
Program.cs
34
Program.cs
@@ -4,7 +4,7 @@ using System.Text;
|
|||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNetCore.Builder;
|
using Microsoft.AspNetCore.Builder;
|
||||||
using Microsoft.AspNetCore.Hosting.Internal;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
using Microsoft.AspNetCore.Hosting.Server;
|
using Microsoft.AspNetCore.Hosting.Server;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.AspNetCore.Http.Features;
|
using Microsoft.AspNetCore.Http.Features;
|
||||||
@@ -31,7 +31,8 @@ namespace Kestrel
|
|||||||
{
|
{
|
||||||
private WebSocketMiddleware wsMiddleware;
|
private WebSocketMiddleware wsMiddleware;
|
||||||
|
|
||||||
public Application() {
|
public Application()
|
||||||
|
{
|
||||||
var wsOptions = new WebSocketOptions();
|
var wsOptions = new WebSocketOptions();
|
||||||
wsMiddleware = new WebSocketMiddleware(continueRequest, new OptionsWrapper<WebSocketOptions>(wsOptions));
|
wsMiddleware = new WebSocketMiddleware(continueRequest, new OptionsWrapper<WebSocketOptions>(wsOptions));
|
||||||
}
|
}
|
||||||
@@ -51,7 +52,8 @@ namespace Kestrel
|
|||||||
await wsMiddleware.Invoke(httpContext);
|
await wsMiddleware.Invoke(httpContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task continueRequest(HttpContext httpContext) {
|
private async Task continueRequest(HttpContext httpContext)
|
||||||
|
{
|
||||||
if (httpContext.WebSockets.IsWebSocketRequest)
|
if (httpContext.WebSockets.IsWebSocketRequest)
|
||||||
{
|
{
|
||||||
var socket = await httpContext.WebSockets.AcceptWebSocketAsync();
|
var socket = await httpContext.WebSockets.AcceptWebSocketAsync();
|
||||||
@@ -69,6 +71,28 @@ namespace Kestrel
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ApplicationLifetime : IApplicationLifetime
|
||||||
|
{
|
||||||
|
private readonly CancellationTokenSource startedSource = new CancellationTokenSource();
|
||||||
|
private readonly CancellationTokenSource stoppingSource = new CancellationTokenSource();
|
||||||
|
private readonly CancellationTokenSource stoppedSource = new CancellationTokenSource();
|
||||||
|
|
||||||
|
public CancellationToken ApplicationStarted => startedSource.Token;
|
||||||
|
|
||||||
|
public CancellationToken ApplicationStopping => stoppingSource.Token;
|
||||||
|
|
||||||
|
public CancellationToken ApplicationStopped => stoppedSource.Token;
|
||||||
|
|
||||||
|
public void StopApplication()
|
||||||
|
{
|
||||||
|
lock (stoppingSource)
|
||||||
|
{
|
||||||
|
if (!stoppingSource.Token.IsCancellationRequested)
|
||||||
|
stoppingSource.Cancel(throwOnFirstException: false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class Program
|
class Program
|
||||||
{
|
{
|
||||||
static async Task Main(string[] args)
|
static async Task Main(string[] args)
|
||||||
@@ -77,10 +101,8 @@ namespace Kestrel
|
|||||||
serverOptions.ListenAnyIP(8080);
|
serverOptions.ListenAnyIP(8080);
|
||||||
|
|
||||||
var transportOptions = new SocketTransportOptions();
|
var transportOptions = new SocketTransportOptions();
|
||||||
|
|
||||||
var loggerFactory = new NullLoggerFactory();
|
var loggerFactory = new NullLoggerFactory();
|
||||||
var lifetimeLogger = new NullLogger<ApplicationLifetime>();
|
var applicationLifetime = new ApplicationLifetime();
|
||||||
var applicationLifetime = new ApplicationLifetime(lifetimeLogger);
|
|
||||||
|
|
||||||
var transportFactory = new SocketTransportFactory(
|
var transportFactory = new SocketTransportFactory(
|
||||||
new OptionsWrapper<SocketTransportOptions>(transportOptions), applicationLifetime, loggerFactory);
|
new OptionsWrapper<SocketTransportOptions>(transportOptions), applicationLifetime, loggerFactory);
|
||||||
|
|||||||
Reference in New Issue
Block a user