diff --git a/yawaflua.WebSockets/Core/WebSocketConfig.cs b/yawaflua.WebSockets/Core/WebSocketConfig.cs new file mode 100644 index 0000000..5194f54 --- /dev/null +++ b/yawaflua.WebSockets/Core/WebSocketConfig.cs @@ -0,0 +1,10 @@ +using Microsoft.AspNetCore.Http; +using yawaflua.WebSockets.Models.Interfaces; + +namespace yawaflua.WebSockets.Core; + +public class WebSocketConfig +{ + public Func? OnOpenHandler { get; set; } = null; + +} \ No newline at end of file diff --git a/yawaflua.WebSockets/Core/WebSocketRouter.cs b/yawaflua.WebSockets/Core/WebSocketRouter.cs index 70e5bcd..aed5a67 100644 --- a/yawaflua.WebSockets/Core/WebSocketRouter.cs +++ b/yawaflua.WebSockets/Core/WebSocketRouter.cs @@ -17,11 +17,12 @@ public class WebSocketRouter internal static readonly List Clients = new(); private readonly IServiceProvider _serviceProvider; private readonly ILogger _logger; - - public WebSocketRouter(IServiceProvider serviceProvider, ILogger logger) + private readonly WebSocketConfig WebSocketConfig; + public WebSocketRouter(IServiceProvider serviceProvider, ILogger logger, WebSocketConfig webSocketConfig) { _serviceProvider = serviceProvider; this._logger = logger; + WebSocketConfig = webSocketConfig; DiscoverHandlers(); Task.Run(() => { @@ -146,6 +147,13 @@ public class WebSocketRouter { var client = new WebSocketClient(context, webSocket, path); 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]; while (webSocket.State == WebSocketState.Open) { diff --git a/yawaflua.WebSockets/ServiceBindings.cs b/yawaflua.WebSockets/ServiceBindings.cs index 9af0e33..4b97c3e 100644 --- a/yawaflua.WebSockets/ServiceBindings.cs +++ b/yawaflua.WebSockets/ServiceBindings.cs @@ -8,11 +8,12 @@ namespace yawaflua.WebSockets; public static class ServiceBindings { - public static IServiceCollection SettingUpWebSockets(this IServiceCollection isc) + public static IServiceCollection SettingUpWebSockets(this IServiceCollection isc, Action? socketOptions = null) { isc.AddSingleton(); isc.AddScoped(); isc.AddSingleton(); + isc.Configure("WebSocketOptions", socketOptions); return isc; }