Skip to content

Commit 7f0ea6e

Browse files
committed
feat:新增中间位置配置服务方式;添加.NET10支持
1 parent b6fc81b commit 7f0ea6e

14 files changed

Lines changed: 132 additions & 26 deletions

File tree

Cyaim.WebSocketServer/Cyaim.WebSocketServer.Client/Cyaim.WebSocketServer.Client.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net8.0</TargetFramework>
4+
<TargetFrameworks>net8.0;net9.0;net10.0</TargetFrameworks>
55
<ImplicitUsings>enable</ImplicitUsings>
66
<Nullable>enable</Nullable>
77
</PropertyGroup>

Cyaim.WebSocketServer/Cyaim.WebSocketServer.Cluster.FreeRedis/Cyaim.WebSocketServer.Cluster.FreeRedis.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
3-
<TargetFrameworks>netstandard2.1;net6.0;net7.0;net8.0;net9.0</TargetFrameworks>
3+
<TargetFrameworks>netstandard2.1;net6.0;net7.0;net8.0;net9.0;net10.0</TargetFrameworks>
44
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
55
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
66
<Authors>Psyche</Authors>
@@ -17,7 +17,7 @@
1717
</Description>
1818
</PropertyGroup>
1919

20-
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0' Or '$(TargetFramework)' == 'net7.0' Or '$(TargetFramework)' == 'net8.0' Or '$(TargetFramework)' == 'net9.0'">
20+
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0' Or '$(TargetFramework)' == 'net7.0' Or '$(TargetFramework)' == 'net8.0' Or '$(TargetFramework)' == 'net9.0' Or '$(TargetFramework)' == 'net10.0'">
2121
<FrameworkReference Include="Microsoft.AspNetCore.App" />
2222
</ItemGroup>
2323

@@ -26,7 +26,7 @@
2626
<PackageReference Include="System.Text.Json" Version="9.0.10" />
2727
</ItemGroup>
2828

29-
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0' Or '$(TargetFramework)' == 'net7.0' Or '$(TargetFramework)' == 'net8.0' Or '$(TargetFramework)' == 'net9.0'">
29+
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0' Or '$(TargetFramework)' == 'net7.0' Or '$(TargetFramework)' == 'net8.0' Or '$(TargetFramework)' == 'net9.0' Or '$(TargetFramework)' == 'net10.0'">
3030
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.1" />
3131
<PackageReference Include="System.Text.Json" Version="8.0.6" />
3232
</ItemGroup>

Cyaim.WebSocketServer/Cyaim.WebSocketServer.Cluster.Hybrid.Implementations/Cyaim.WebSocketServer.Cluster.Hybrid.Implementations.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
3-
<TargetFrameworks>netstandard2.1;net6.0;net7.0;net8.0;net9.0</TargetFrameworks>
3+
<TargetFrameworks>netstandard2.1;net6.0;net7.0;net8.0;net9.0;net10.0</TargetFrameworks>
44
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
55
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
66
<Authors>Psyche</Authors>
@@ -17,7 +17,7 @@
1717
</Description>
1818
</PropertyGroup>
1919

20-
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0' Or '$(TargetFramework)' == 'net7.0' Or '$(TargetFramework)' == 'net8.0' Or '$(TargetFramework)' == 'net9.0'">
20+
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0' Or '$(TargetFramework)' == 'net7.0' Or '$(TargetFramework)' == 'net8.0' Or '$(TargetFramework)' == 'net9.0' Or '$(TargetFramework)' == 'net10.0'">
2121
<FrameworkReference Include="Microsoft.AspNetCore.App" />
2222
</ItemGroup>
2323

@@ -26,7 +26,7 @@
2626
<PackageReference Include="System.Text.Json" Version="9.0.10" />
2727
</ItemGroup>
2828

29-
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0' Or '$(TargetFramework)' == 'net7.0' Or '$(TargetFramework)' == 'net8.0' Or '$(TargetFramework)' == 'net9.0'">
29+
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0' Or '$(TargetFramework)' == 'net7.0' Or '$(TargetFramework)' == 'net8.0' Or '$(TargetFramework)' == 'net9.0' Or '$(TargetFramework)' == 'net10.0'">
3030
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.1" />
3131
<PackageReference Include="System.Text.Json" Version="8.0.6" />
3232
</ItemGroup>

Cyaim.WebSocketServer/Cyaim.WebSocketServer.Cluster.Hybrid/Cyaim.WebSocketServer.Cluster.Hybrid.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
3-
<TargetFrameworks>netstandard2.1;net6.0;net7.0;net8.0;net9.0</TargetFrameworks>
3+
<TargetFrameworks>netstandard2.1;net6.0;net7.0;net8.0;net9.0;net10.0</TargetFrameworks>
44
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
55
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
66
<Authors>Psyche</Authors>
@@ -19,7 +19,7 @@
1919
</Description>
2020
</PropertyGroup>
2121

22-
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0' Or '$(TargetFramework)' == 'net7.0' Or '$(TargetFramework)' == 'net8.0' Or '$(TargetFramework)' == 'net9.0'">
22+
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0' Or '$(TargetFramework)' == 'net7.0' Or '$(TargetFramework)' == 'net8.0' Or '$(TargetFramework)' == 'net9.0' Or '$(TargetFramework)' == 'net10.0'">
2323
<FrameworkReference Include="Microsoft.AspNetCore.App" />
2424
</ItemGroup>
2525

@@ -28,7 +28,7 @@
2828
<PackageReference Include="System.Text.Json" Version="9.0.10" />
2929
</ItemGroup>
3030

31-
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0' Or '$(TargetFramework)' == 'net7.0' Or '$(TargetFramework)' == 'net8.0' Or '$(TargetFramework)' == 'net9.0'">
31+
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0' Or '$(TargetFramework)' == 'net7.0' Or '$(TargetFramework)' == 'net8.0' Or '$(TargetFramework)' == 'net9.0' Or '$(TargetFramework)' == 'net10.0'">
3232
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.1" />
3333
<PackageReference Include="System.Text.Json" Version="8.0.6" />
3434
</ItemGroup>

Cyaim.WebSocketServer/Cyaim.WebSocketServer.Cluster.RabbitMQ/Cyaim.WebSocketServer.Cluster.RabbitMQ.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
3-
<TargetFrameworks>netstandard2.1;net6.0;net7.0;net8.0;net9.0</TargetFrameworks>
3+
<TargetFrameworks>netstandard2.1;net6.0;net7.0;net8.0;net9.0;net10.0</TargetFrameworks>
44
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
55
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
66
<Authors>Psyche</Authors>
@@ -17,7 +17,7 @@
1717
</Description>
1818
</PropertyGroup>
1919

20-
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0' Or '$(TargetFramework)' == 'net7.0' Or '$(TargetFramework)' == 'net8.0' Or '$(TargetFramework)' == 'net9.0'">
20+
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0' Or '$(TargetFramework)' == 'net7.0' Or '$(TargetFramework)' == 'net8.0' Or '$(TargetFramework)' == 'net9.0' Or '$(TargetFramework)' == 'net10.0'">
2121
<FrameworkReference Include="Microsoft.AspNetCore.App" />
2222
</ItemGroup>
2323

@@ -26,7 +26,7 @@
2626
<PackageReference Include="System.Text.Json" Version="9.0.10" />
2727
</ItemGroup>
2828

29-
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0' Or '$(TargetFramework)' == 'net7.0' Or '$(TargetFramework)' == 'net8.0' Or '$(TargetFramework)' == 'net9.0'">
29+
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0' Or '$(TargetFramework)' == 'net7.0' Or '$(TargetFramework)' == 'net8.0' Or '$(TargetFramework)' == 'net9.0' Or '$(TargetFramework)' == 'net10.0'">
3030
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.1" />
3131
<PackageReference Include="System.Text.Json" Version="8.0.6" />
3232
</ItemGroup>

Cyaim.WebSocketServer/Cyaim.WebSocketServer.Cluster.StackExchangeRedis/Cyaim.WebSocketServer.Cluster.StackExchangeRedis.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
3-
<TargetFrameworks>netstandard2.1;net6.0;net7.0;net8.0;net9.0</TargetFrameworks>
3+
<TargetFrameworks>netstandard2.1;net6.0;net7.0;net8.0;net9.0;net10.0</TargetFrameworks>
44
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
55
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
66
<Authors>Psyche</Authors>
@@ -17,7 +17,7 @@
1717
</Description>
1818
</PropertyGroup>
1919

20-
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0' Or '$(TargetFramework)' == 'net7.0' Or '$(TargetFramework)' == 'net8.0' Or '$(TargetFramework)' == 'net9.0'">
20+
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0' Or '$(TargetFramework)' == 'net7.0' Or '$(TargetFramework)' == 'net8.0' Or '$(TargetFramework)' == 'net9.0' Or '$(TargetFramework)' == 'net10.0'">
2121
<FrameworkReference Include="Microsoft.AspNetCore.App" />
2222
</ItemGroup>
2323

@@ -26,7 +26,7 @@
2626
<PackageReference Include="System.Text.Json" Version="9.0.10" />
2727
</ItemGroup>
2828

29-
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0' Or '$(TargetFramework)' == 'net7.0' Or '$(TargetFramework)' == 'net8.0' Or '$(TargetFramework)' == 'net9.0'">
29+
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0' Or '$(TargetFramework)' == 'net7.0' Or '$(TargetFramework)' == 'net8.0' Or '$(TargetFramework)' == 'net9.0' Or '$(TargetFramework)' == 'net10.0'">
3030
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.1" />
3131
<PackageReference Include="System.Text.Json" Version="8.0.6" />
3232
</ItemGroup>

Cyaim.WebSocketServer/Cyaim.WebSocketServer/Cyaim.WebSocketServer.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Project Sdk="Microsoft.NET.Sdk">
33
<PropertyGroup>
4-
<TargetFrameworks>netstandard2.1;net6.0;net7.0;net8.0;net9.0</TargetFrameworks>
4+
<TargetFrameworks>netstandard2.1;net6.0;net7.0;net8.0;net9.0;net10.0</TargetFrameworks>
55
</PropertyGroup>
66
<PropertyGroup>
77
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
@@ -24,7 +24,7 @@
2424
</Description>
2525
<PackageReadmeFile>README.md</PackageReadmeFile>
2626
</PropertyGroup>
27-
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0' Or '$(TargetFramework)' == 'net7.0' Or '$(TargetFramework)' == 'net8.0' Or '$(TargetFramework)' == 'net9.0'">
27+
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0' Or '$(TargetFramework)' == 'net7.0' Or '$(TargetFramework)' == 'net8.0' Or '$(TargetFramework)' == 'net9.0' Or '$(TargetFramework)' == 'net10.0'">
2828
<FrameworkReference Include="Microsoft.AspNetCore.App" />
2929
</ItemGroup>
3030
<!-- 对于 .NET Standard 2.1 版本 -->
@@ -89,7 +89,7 @@
8989
Version="10.0.0" />
9090
</ItemGroup>
9191
<!-- OpenTelemetry Metrics for OTLP export -->
92-
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0' Or '$(TargetFramework)' == 'net7.0' Or '$(TargetFramework)' == 'net8.0' Or '$(TargetFramework)' == 'net9.0'">
92+
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0' Or '$(TargetFramework)' == 'net7.0' Or '$(TargetFramework)' == 'net8.0' Or '$(TargetFramework)' == 'net9.0' Or '$(TargetFramework)' == 'net10.0'">
9393
<PackageReference Include="OpenTelemetry"
9494
Version="1.9.0" />
9595
<PackageReference Include="OpenTelemetry.Extensions.Hosting"

Cyaim.WebSocketServer/Cyaim.WebSocketServer/Middlewares/WebSocketRouteMiddlewareExtensions.cs

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using Microsoft.AspNetCore.Hosting.Server.Features;
88
using Microsoft.Extensions.DependencyInjection;
99
using Microsoft.Extensions.Hosting;
10+
using Microsoft.Extensions.Logging;
1011
using System;
1112
using System.Linq;
1213

@@ -32,6 +33,86 @@ public static IApplicationBuilder UseWebSocketServer(this IApplicationBuilder ap
3233
return app;
3334
}
3435

36+
/// <summary>
37+
/// Add Cyaim.WebSocketServer.Infrastructure.Middlewares.WebSocketRouteMiddleware Middleware with configuration.
38+
/// This overload allows you to configure WebSocketRouteOption at middleware setup time,
39+
/// where you can directly access services from the application's service provider.
40+
/// The websocket request will execute the with relation endpoint methods.
41+
///
42+
/// 此重载允许您在中间件设置时配置 WebSocketRouteOption,
43+
/// 此时您可以直接从应用程序的服务提供者访问服务,无需手动创建 ServiceProvider。
44+
/// </summary>
45+
/// <param name="app">The application builder / 应用程序构建器</param>
46+
/// <param name="configure">Configuration action that receives the WebSocketRouteOption and IServiceProvider / 配置操作,接收 WebSocketRouteOption 和 IServiceProvider</param>
47+
/// <returns></returns>
48+
public static IApplicationBuilder UseWebSocketServer(this IApplicationBuilder app, Action<WebSocketRouteOption, IServiceProvider> configure)
49+
{
50+
if (app == null)
51+
{
52+
throw new ArgumentNullException(nameof(app));
53+
}
54+
55+
if (configure == null)
56+
{
57+
throw new ArgumentNullException(nameof(configure));
58+
}
59+
60+
var serviceProvider = app.ApplicationServices;
61+
62+
// 尝试从服务容器中获取已配置的 WebSocketRouteOption
63+
var existingOption = serviceProvider.GetService<WebSocketRouteOption>();
64+
WebSocketRouteOption option;
65+
66+
if (existingOption != null)
67+
{
68+
// 如果已经通过 ConfigureWebSocketRoute 配置过,使用现有的配置并允许补充配置
69+
option = existingOption;
70+
}
71+
else
72+
{
73+
// 如果没有配置过,创建新的配置
74+
// 注意:这种情况下,需要确保在 configure 中完成所有必要的配置
75+
option = new WebSocketRouteOption();
76+
}
77+
78+
// 执行配置操作,传入 option 和 serviceProvider,此时可以直接从 serviceProvider 获取服务
79+
configure(option, serviceProvider);
80+
81+
// 验证必要的配置
82+
if (option.WebSocketChannels == null || option.WebSocketChannels.Count < 1)
83+
{
84+
throw new InvalidOperationException("WebSocketRouteOption.WebSocketChannels must be configured. Please configure WebSocketChannels in the configure action, or call ConfigureWebSocketRoute first.");
85+
}
86+
87+
// 如果 ApplicationServiceCollection 未设置,尝试从已注册的服务中获取
88+
// 注意:如果用户完全在 UseWebSocketServer 中配置(没有调用 ConfigureWebSocketRoute),
89+
// ApplicationServiceCollection 可能为 null,这通常不影响基本功能
90+
// 但如果需要某些高级功能(如动态服务解析),可能需要先调用 ConfigureWebSocketRoute
91+
92+
// 如果之前没有注册到服务容器,我们需要通过自定义方式传递配置
93+
// 由于服务容器已构建,我们使用闭包来传递配置
94+
if (existingOption == null)
95+
{
96+
// 创建一个包装中间件,通过闭包传递配置
97+
app.Use(next =>
98+
{
99+
var loggerFactory = serviceProvider.GetRequiredService<ILoggerFactory>();
100+
var logger = loggerFactory.CreateLogger<WebSocketRouteMiddleware>();
101+
var middleware = new WebSocketRouteMiddleware(next, logger, option);
102+
return middleware.Invoke;
103+
});
104+
}
105+
else
106+
{
107+
// 如果已经注册,直接使用标准的中间件注册方式
108+
app.UseMiddleware<WebSocketRouteMiddleware>();
109+
}
110+
111+
WebSocketRouteOption.ApplicationServices = serviceProvider;
112+
113+
return app;
114+
}
115+
35116
/// <summary>
36117
/// Get WebSocket access address
37118
/// </summary>

Cyaim.WebSocketServer/Dashboard/Cyaim.WebSocketServer.Dashboard/Cyaim.WebSocketServer.Dashboard.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="UTF-8" ?>
22
<Project Sdk="Microsoft.NET.Sdk">
33
<PropertyGroup>
4-
<TargetFrameworks>netstandard2.1;net6.0;net7.0;net8.0;net9.0</TargetFrameworks>
4+
<TargetFrameworks>netstandard2.1;net6.0;net7.0;net8.0;net9.0;net10.0</TargetFrameworks>
55
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
66
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
77
<Authors>Psyche</Authors>
@@ -16,7 +16,7 @@
1616
WebSocketServer 仪表板,用于监控和管�?WebSocket 服务器和集群
1717
</Description>
1818
</PropertyGroup>
19-
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0' Or '$(TargetFramework)' == 'net7.0' Or '$(TargetFramework)' == 'net8.0' Or '$(TargetFramework)' == 'net9.0'">
19+
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0' Or '$(TargetFramework)' == 'net7.0' Or '$(TargetFramework)' == 'net8.0' Or '$(TargetFramework)' == 'net9.0' Or '$(TargetFramework)' == 'net10.0'">
2020
<FrameworkReference Include="Microsoft.AspNetCore.App" />
2121
</ItemGroup>
2222
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.1'">

Cyaim.WebSocketServer/Sample/Cyaim.WebSocketServer.Example.Wpf/Cyaim.WebSocketServer.Example.Wpf.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<OutputType>WinExe</OutputType>
5-
<TargetFramework>net8.0-windows</TargetFramework>
5+
<TargetFrameworks>net8.0-windows;net9.0-windows;net10.0-windows</TargetFrameworks>
66
<Nullable>enable</Nullable>
77
<EnableWindowsTargeting>true</EnableWindowsTargeting>
88
<ImplicitUsings>enable</ImplicitUsings>

0 commit comments

Comments
 (0)