39 lines
1.1 KiB
C#
39 lines
1.1 KiB
C#
using Microsoft.AspNetCore.Http;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Syski.WebSocket.Services.WebSockets
|
|
{
|
|
public class WebSocketMiddleware
|
|
{
|
|
|
|
private readonly RequestDelegate next;
|
|
private readonly IWebSocketHandler webSocketHandler;
|
|
|
|
public WebSocketMiddleware(RequestDelegate next, IWebSocketHandler webSocketHandler)
|
|
{
|
|
this.next = next;
|
|
this.webSocketHandler = webSocketHandler;
|
|
}
|
|
|
|
public async Task Invoke(HttpContext context)
|
|
{
|
|
if (context.WebSockets.IsWebSocketRequest)
|
|
{
|
|
var webSocket = await context.WebSockets.AcceptWebSocketAsync();
|
|
WebSocketConnection webSocketConnection = new WebSocketConnection(webSocket);
|
|
|
|
await webSocketHandler.OnConnected(webSocketConnection);
|
|
|
|
await webSocketHandler.OnReceiveMessage(webSocketConnection);
|
|
|
|
await webSocketHandler.OnDisconnected(webSocketConnection);
|
|
}
|
|
else
|
|
{
|
|
await next.Invoke(context);
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|