ITcpSocketFactory1. 服务注入
services.AddBootstrapBlazorTcpSocketFactory();@@ -84,26 +86,26 @@ private async Task CreateClient()
数据适配器设计思路如下
SocketDataTypeConverterAttribute 标签约定通讯数据使用那个转换类型进行转换 指定类型需继承 ISocketDataConverter
+ DataTypeConverterAttribute 标签约定通讯数据使用那个转换类型进行转换 指定类型需继承 IDataConverter
接口
SocketDataPropertyConverterAttribute 标签约定如何转换数据类型 (Property) 属性值DataPropertyConverterAttribute 标签约定如何转换数据类型 (Property) 属性值[SocketDataTypeConverter(Type = typeof(SocketDataConverter<MockEntity>))] +[DataTypeConverter(Type = typeof(DataConverter<MockEntity>))] class MockEntity { - [SocketDataPropertyConverter(Type = typeof(byte[]), Offset = 0, Length = 5)] + [DataPropertyConverter(Type = typeof(byte[]), Offset = 0, Length = 5)] public byte[]? Header { get; set; } - [SocketDataPropertyConverter(Type = typeof(byte[]), Offset = 5, Length = 2)] + [DataPropertyConverter(Type = typeof(byte[]), Offset = 5, Length = 2)] public byte[]? Body { get; set; } - [SocketDataPropertyConverter(Type = typeof(Foo), Offset = 7, Length = 1, ConverterType = typeof(FooConverter), ConverterParameters = ["test"])] + [DataPropertyConverter(Type = typeof(Foo), Offset = 7, Length = 1, ConverterType = typeof(FooConverter), ConverterParameters = ["test"])] public string? Value1 { get; set; } }-class FooConverter(string name) : ISocketDataPropertyConverter +class FooConverter(string name) : IDataPropertyConverter { public object? Convert(ReadOnlyMemory<byte> data) { @@ -114,15 +116,15 @@ class MockEntity针对第三方程序集的数据类型解决方案如下:
使用
-builder.Services.ConfigureSocketDataConverters(options => +builder.Services.ConfigureDataConverters(options => { options.AddTypeConverter<MockEntity>(); - options.AddPropertyConverter<MockEntity>(entity => entity.Header, new SocketDataPropertyConverterAttribute() + options.AddPropertyConverter<MockEntity>(entity => entity.Header, new DataPropertyConverterAttribute() { Offset = 0, Length = 5 }); - options.AddPropertyConverter<MockEntity>(entity => entity.Body, new SocketDataPropertyConverterAttribute() + options.AddPropertyConverter<MockEntity>(entity => entity.Body, new DataPropertyConverterAttribute() { Offset = 5, Length = 2 diff --git a/src/BootstrapBlazor.Server/Components/Samples/Sockets/DataEntities.razor b/src/BootstrapBlazor.Server/Components/Samples/Sockets/DataEntities.razor index f42a04f24c7..f1498c51879 100644 --- a/src/BootstrapBlazor.Server/Components/Samples/Sockets/DataEntities.razor +++ b/src/BootstrapBlazor.Server/Components/Samples/Sockets/DataEntities.razor @@ -8,74 +8,74 @@ Introduction="@Localizer["NormalIntro"]" Name="Normal" ShowCode="false">- 通过
-SocketDataTypeConverterAttribute类标签与SocketDataPropertyConverterAttribute+ 通过DataTypeConverterAttribute类标签与DataPropertyConverterAttribute属性标签可以将通讯数据自动转化为我们系统中需要的业务实体类,示例如下:[SocketDataTypeConverter(Type = typeof(SocketDataConverter<MockEntity>))] +[DataTypeConverter(Type = typeof(DataConverter<MockEntity>))] class MockEntity { - [SocketDataPropertyConverter(Type = typeof(byte[]), Offset = 0, Length = 5)] + [DataPropertyConverter(Type = typeof(byte[]), Offset = 0, Length = 5)] public byte[]? Header { get; set; } - [SocketDataPropertyConverter(Type = typeof(byte[]), Offset = 5, Length = 2)] + [DataPropertyConverter(Type = typeof(byte[]), Offset = 5, Length = 2)] public byte[]? Body { get; set; } - [SocketDataPropertyConverter(Type = typeof(string), Offset = 7, Length = 1, EncodingName = "utf-8")] + [DataPropertyConverter(Type = typeof(string), Offset = 7, Length = 1, EncodingName = "utf-8")] public string? Value1 { get; set; } - [SocketDataPropertyConverter(Type = typeof(int), Offset = 8, Length = 1)] + [DataPropertyConverter(Type = typeof(int), Offset = 8, Length = 1)] public int Value2 { get; set; } }-1.
+SocketDataTypeConverter参数说明:1.
DataTypeConverter参数说明:
SocketDataConverter 泛型类,建议看一下源码非常方便扩展出自己的转换器
+ DataConverter 泛型类,建议看一下源码非常方便扩展出自己的转换器
2. SocketDataPropertyConverterAttribute 参数说明
2. DataPropertyConverterAttribute 参数说明
utf-8 编码ISocketDataPropertyConverter 接口IDataPropertyConverter 接口组件库内置了大量数据类型转换器
SocketDataByteArrayConverter 转成 byte[] 数组类型SocketDataStringConverter 转成 string 字符串类型SocketDataEnumConverter 转成 enum 枚举类型SocketDataBoolConverter 转成 bool 布尔类型SocketDataInt16BigEndianConverter 转成 short 整形大端读取SocketDataInt32BigEndianConverter 转成 int 整形大端读取SocketDataInt64BigEndianConverter 转成 long 长整形大端读取SocketDataSingleBigEndianConverter 转成 float 单精度浮点数大端读取SocketDataDoubleBigEndianConverter 转成 double 双精度浮点数大端读取SocketDataUInt16BigEndianConverter 转成 ushort 无符号整形大端读取SocketDataUInt32BigEndianConverter 转成 uint 无符号整形大端读取SocketDataUInt64BigEndianConverter 转成 ulong 无符号长整形大端读取SocketDataInt16LittleEndianConverter 转成 short 整形小端读取SocketDataInt32LittleEndianConverter 转成 int 整形小端读取SocketDataInt64LittleEndianConverter 转成 long 长整形小端读取SocketDataSingleLittleEndianConverter 转成 float 单精度浮点数小端读取SocketDataDoubleLittleEndianConverter 转成 double 双精度浮点数小端读取SocketDataUInt16LittleEndianConverter 转成 ushort 无符号整形小端读取SocketDataUInt32LittleEndianConverter 转成 uint 无符号整形小端读取SocketDataUInt64LittleEndianConverter 转成 ulong 无符号整形小端读取DataByteArrayConverter 转成 byte[] 数组类型DataStringConverter 转成 string 字符串类型DataEnumConverter 转成 enum 枚举类型DataBoolConverter 转成 bool 布尔类型DataInt16BigEndianConverter 转成 short 整形大端读取DataInt32BigEndianConverter 转成 int 整形大端读取DataInt64BigEndianConverter 转成 long 长整形大端读取DataSingleBigEndianConverter 转成 float 单精度浮点数大端读取DataDoubleBigEndianConverter 转成 double 双精度浮点数大端读取DataUInt16BigEndianConverter 转成 ushort 无符号整形大端读取DataUInt32BigEndianConverter 转成 uint 无符号整形大端读取DataUInt64BigEndianConverter 转成 ulong 无符号长整形大端读取DataInt16LittleEndianConverter 转成 short 整形小端读取DataInt32LittleEndianConverter 转成 int 整形小端读取DataInt64LittleEndianConverter 转成 long 长整形小端读取DataSingleLittleEndianConverter 转成 float 单精度浮点数小端读取DataDoubleLittleEndianConverter 转成 double 双精度浮点数小端读取DataUInt16LittleEndianConverter 转成 ushort 无符号整形小端读取DataUInt32LittleEndianConverter 转成 uint 无符号整形小端读取DataUInt64LittleEndianConverter 转成 ulong 无符号整形小端读取自定义数据类型转化器示例
-[SocketTypeDataConverter(Type = typeof(SocketDataConverter<MockEntity>))] +[SocketTypeDataConverter(Type = typeof(DataConverter<MockEntity>))] class MockEntity { - [SocketDataPropertyConverter(Type = typeof(byte[]), Offset = 0, Length = 5)] + [DataPropertyConverter(Type = typeof(byte[]), Offset = 0, Length = 5)] public byte[]? Header { get; set; } - [SocketDataPropertyConverter(Type = typeof(byte[]), Offset = 5, Length = 2)] + [DataPropertyConverter(Type = typeof(byte[]), Offset = 5, Length = 2)] public byte[]? Body { get; set; } - [SocketDataPropertyConverter(Type = typeof(Foo), Offset = 7, Length = 1, ConverterType = typeof(FooConverter), ConverterParameters = ["test"])] + [DataPropertyConverter(Type = typeof(Foo), Offset = 7, Length = 1, ConverterType = typeof(FooConverter), ConverterParameters = ["test"])] public string? Value1 { get; set; } }-class FooConverter(string name) : ISocketDataPropertyConverter +class FooConverter(string name) : IDataPropertyConverter { public object? Convert(ReadOnlyMemory<byte> data) { diff --git a/src/BootstrapBlazor.Server/Components/Samples/Sockets/Notice.razor b/src/BootstrapBlazor.Server/Components/Samples/Sockets/Notice.razor index b618855b426..19d8b9e1efc 100644 --- a/src/BootstrapBlazor.Server/Components/Samples/Sockets/Notice.razor +++ b/src/BootstrapBlazor.Server/Components/Samples/Sockets/Notice.razor @@ -1,3 +1,5 @@ + +
ITcpSocketFactory服务仅在Server模式下可用diff --git a/src/BootstrapBlazor.Server/Locales/en-US.json b/src/BootstrapBlazor.Server/Locales/en-US.json index 57bc7a42645..3f1357895ae 100644 --- a/src/BootstrapBlazor.Server/Locales/en-US.json +++ b/src/BootstrapBlazor.Server/Locales/en-US.json @@ -7129,7 +7129,7 @@ "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 SocketDataTypeConverterAttributeattribute" + "NormalIntro": "Enable automatic data conversion through theDataTypeConverterAttributeattribute" }, "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 c4a0301e360..4844165f379 100644 --- a/src/BootstrapBlazor.Server/Locales/zh-CN.json +++ b/src/BootstrapBlazor.Server/Locales/zh-CN.json @@ -7129,7 +7129,7 @@ "DataEntityTitle": "Socket 数据转化实体类", "DataEntityDescription": "接收到通讯数据后自动转成业务需要的实体类", "NormalTitle": "基本用法", - "NormalIntro": "通过SocketDataTypeConverterAttribute标签开启数据自动转换功能" + "NormalIntro": "通过DataTypeConverterAttribute标签开启数据自动转换功能" }, "BootstrapBlazor.Server.Components.Samples.NetworkMonitors": { "NetworkMonitorTitle": "NetworkMonitor 网络状态",