diff --git a/src/BootstrapBlazor.Server/BootstrapBlazor.Server.csproj b/src/BootstrapBlazor.Server/BootstrapBlazor.Server.csproj
index ef49367be52..8734c47a161 100644
--- a/src/BootstrapBlazor.Server/BootstrapBlazor.Server.csproj
+++ b/src/BootstrapBlazor.Server/BootstrapBlazor.Server.csproj
@@ -68,13 +68,14 @@
// 实战中可以使用 ITcpSocketClient 扩展方法 SetDataPackageAdapter 简化代码 -_client.SetDataPackageAdapter(_dataAdapter, UpdateReceiveLog);+
// 实战中可以使用 ITcpSocketClient 扩展方法 AddDataPackageAdapter 简化代码 +// 如果 _client 实例在当前页面不销毁时,切记使用 AddDataPackageAdapter 移除当前页面加载的 UpdateReceiveLog 回调方法避免内存泄露 +_client.AddDataPackageAdapter(_dataAdapter, UpdateReceiveLog);
本例中使用的模拟服务端代码如下:
diff --git a/src/BootstrapBlazor.Server/Components/Samples/Sockets/Adapters.razor.cs b/src/BootstrapBlazor.Server/Components/Samples/Sockets/Adapters.razor.cs index d7e60e20a07..b421951b9ed 100644 --- a/src/BootstrapBlazor.Server/Components/Samples/Sockets/Adapters.razor.cs +++ b/src/BootstrapBlazor.Server/Components/Samples/Sockets/Adapters.razor.cs @@ -49,7 +49,7 @@ protected override void OnInitialized() _dataAdapter.ReceivedCallBack = UpdateReceiveLog; // 实战中可以通过下面一句话设置数据适配器与回调方法 - // _client.SetDataPackageAdapter(_dataAdapter, UpdateReceiveLog); + // _client.AddDataPackageAdapter(_dataAdapter, UpdateReceiveLog); } diff --git a/src/BootstrapBlazor.Server/Components/Samples/Sockets/DataEntities.razor b/src/BootstrapBlazor.Server/Components/Samples/Sockets/DataEntities.razor index f1498c51879..517b2629302 100644 --- a/src/BootstrapBlazor.Server/Components/Samples/Sockets/DataEntities.razor +++ b/src/BootstrapBlazor.Server/Components/Samples/Sockets/DataEntities.razor @@ -63,7 +63,7 @@ class MockEntityDataUInt64LittleEndianConverter 转成 ulong 无符号整形小端读取自定义数据类型转化器示例
-[SocketTypeDataConverter(Type = typeof(DataConverter<MockEntity>))] +[DataTypeConverter(Type = typeof(DataConverter<MockEntity>))] class MockEntity { [DataPropertyConverter(Type = typeof(byte[]), Offset = 0, Length = 5)] @@ -84,3 +84,44 @@ class MockEntity }更多技术细节可以参考以上内置提供的转换器源码
+ ++ diff --git a/src/BootstrapBlazor.Server/Locales/en-US.json b/src/BootstrapBlazor.Server/Locales/en-US.json index 152909e805e..e9e7490f9bd 100644 --- a/src/BootstrapBlazor.Server/Locales/en-US.json +++ b/src/BootstrapBlazor.Server/Locales/en-US.json @@ -7163,7 +7163,9 @@ "DataEntityTitle": "Socket Auto Entity", "DataEntityDescription": "After receiving the communication data, it is automatically converted into the entity class required by the business", "NormalTitle": "Basic usage", - "NormalIntro": "Enable automatic data conversion through the通过
+ConfigureDataConverters可以配置任意类型(第三方程序集中无源码类型)自定数据转换class MockEntity +{ + public byte[]? Header { get; set; } + + public byte[]? Body { get; set; } +}+service.ConfigureDataConverters(options => +{ + // 配置 MockEntity 转换 + options.AddTypeConverter<MockEntity>(); + + // 配置 MockEntity 属性 Header 转换逻辑 从起始位置 0 开始读取 5 个字节 + options.AddPropertyConverter<MockEntity>(entity => entity.Header, new DataPropertyConverterAttribute() + { + Offset = 0, + Length = 5 + }); + + // 配置 MockEntity 属性 Body 转换逻辑 从起始位置 5 开始读取 2 个字节 + options.AddPropertyConverter<MockEntity>(entity => entity.Body, new DataPropertyConverterAttribute() + { + Offset = 5, + Length = 2 + }); +});+通过调用
+ITcpSocketClient实例泛型扩展方法AddDataPackageAdapter在回调方法OnReceiveAsync中直接拿到数据实体类// 创建一个数据适配器 +var adapter = new DataPackageAdapter(new FixLengthDataPackageHandler(7)); + +// 设置数据适配器与回调方法 +_client.AddDataPackageAdapter<MockEntity>(adapter, OnReceiveAsync);+private async Task OnReceiveAsync(MockEntity? entity) +{ + return Task.CompletedTask; +}+DataTypeConverterAttributeattribute" + "NormalIntro": "Enable automatic data conversion through theDataTypeConverterAttributeattribute", + "ConfigTitle": "DataType Converter", + "ConfigIntro": "Use theConfigureDataConvertersmethod to map the entity class and automatically convert the received data" }, "BootstrapBlazor.Server.Components.Samples.NetworkMonitors": { "NetworkMonitorTitle": "NetworkMonitor", diff --git a/src/BootstrapBlazor.Server/Locales/zh-CN.json b/src/BootstrapBlazor.Server/Locales/zh-CN.json index baa9180c2c8..8f0312dbdb7 100644 --- a/src/BootstrapBlazor.Server/Locales/zh-CN.json +++ b/src/BootstrapBlazor.Server/Locales/zh-CN.json @@ -7165,7 +7165,9 @@ "DataEntityTitle": "Socket 数据转化实体类", "DataEntityDescription": "接收到通讯数据后自动转成业务需要的实体类", "NormalTitle": "基本用法", - "NormalIntro": "通过DataTypeConverterAttribute标签开启数据自动转换功能" + "NormalIntro": "通过DataTypeConverterAttribute标签开启数据自动转换功能", + "ConfigTitle": "数据实体类映射配置", + "ConfigIntro": "使用ConfigureDataConverters方法对实体类进行映射配置将接收到的数据自动转化" }, "BootstrapBlazor.Server.Components.Samples.NetworkMonitors": { "NetworkMonitorTitle": "NetworkMonitor 网络状态",