mirror of
https://github.com/yawaflua/WebSockets.git
synced 2025-12-09 20:09:32 +02:00
Adds onOpenHandler
This commit is contained in:
10
yawaflua.WebSockets/Core/WebSocketConfig.cs
Normal file
10
yawaflua.WebSockets/Core/WebSocketConfig.cs
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
using Microsoft.AspNetCore.Http;
|
||||||
|
using yawaflua.WebSockets.Models.Interfaces;
|
||||||
|
|
||||||
|
namespace yawaflua.WebSockets.Core;
|
||||||
|
|
||||||
|
public class WebSocketConfig
|
||||||
|
{
|
||||||
|
public Func<IWebSocket, HttpContext, Task>? OnOpenHandler { get; set; } = null;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -17,11 +17,12 @@ public class WebSocketRouter
|
|||||||
internal static readonly List<IWebSocketClient> Clients = new();
|
internal static readonly List<IWebSocketClient> Clients = new();
|
||||||
private readonly IServiceProvider _serviceProvider;
|
private readonly IServiceProvider _serviceProvider;
|
||||||
private readonly ILogger<WebSocketRouter> _logger;
|
private readonly ILogger<WebSocketRouter> _logger;
|
||||||
|
private readonly WebSocketConfig WebSocketConfig;
|
||||||
public WebSocketRouter(IServiceProvider serviceProvider, ILogger<WebSocketRouter> logger)
|
public WebSocketRouter(IServiceProvider serviceProvider, ILogger<WebSocketRouter> logger, WebSocketConfig webSocketConfig)
|
||||||
{
|
{
|
||||||
_serviceProvider = serviceProvider;
|
_serviceProvider = serviceProvider;
|
||||||
this._logger = logger;
|
this._logger = logger;
|
||||||
|
WebSocketConfig = webSocketConfig;
|
||||||
DiscoverHandlers();
|
DiscoverHandlers();
|
||||||
Task.Run(() =>
|
Task.Run(() =>
|
||||||
{
|
{
|
||||||
@@ -146,6 +147,13 @@ public class WebSocketRouter
|
|||||||
{
|
{
|
||||||
var client = new WebSocketClient(context, webSocket, path);
|
var client = new WebSocketClient(context, webSocket, path);
|
||||||
Clients.Add(client);
|
Clients.Add(client);
|
||||||
|
|
||||||
|
await Task.Run(async () =>
|
||||||
|
{
|
||||||
|
if (WebSocketConfig.OnOpenHandler != null)
|
||||||
|
await WebSocketConfig.OnOpenHandler((webSocket as IWebSocket)!, context);
|
||||||
|
}, cts);
|
||||||
|
|
||||||
var buffer = new byte[1024 * 4];
|
var buffer = new byte[1024 * 4];
|
||||||
while (webSocket.State == WebSocketState.Open)
|
while (webSocket.State == WebSocketState.Open)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -8,11 +8,12 @@ namespace yawaflua.WebSockets;
|
|||||||
|
|
||||||
public static class ServiceBindings
|
public static class ServiceBindings
|
||||||
{
|
{
|
||||||
public static IServiceCollection SettingUpWebSockets(this IServiceCollection isc)
|
public static IServiceCollection SettingUpWebSockets(this IServiceCollection isc, Action<WebSocketOptions>? socketOptions = null)
|
||||||
{
|
{
|
||||||
isc.AddSingleton<WebSocketRouter>();
|
isc.AddSingleton<WebSocketRouter>();
|
||||||
isc.AddScoped<IWebSocketManager, WebSocketManager>();
|
isc.AddScoped<IWebSocketManager, WebSocketManager>();
|
||||||
isc.AddSingleton<WebSocketMiddleware>();
|
isc.AddSingleton<WebSocketMiddleware>();
|
||||||
|
isc.Configure("WebSocketOptions", socketOptions);
|
||||||
return isc;
|
return isc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user