Skip to content

Commit 8aab534

Browse files
committed
doc: 更新相关文档说明
1 parent 35f8b93 commit 8aab534

File tree

5 files changed

+48
-23
lines changed

5 files changed

+48
-23
lines changed

src/BootstrapBlazor.Server/Components/Samples/SocketFactories.razor

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -54,16 +54,15 @@ private async Task CreateClient()
5454
// 创建 ITcpSocketClient 实例
5555
var client = TcpSocketFactory.GetOrCreate("localhost", 0);
5656

57-
// 设置 FixLengthDataPackageHandler 数据处理器处理数据定长 4 的数据
58-
client.SetDataHandler(new FixLengthDataPackageHandler(4)
57+
// 设置数据适配器 使用 FixLengthDataPackageHandler 数据处理器处理数据定长 4 的数据
58+
var adapter = new DataPackageAdapter
5959
{
60-
// 设置接收数据回调方法
61-
ReceivedCallBack = buffer =>
62-
{
63-
// 内部自动处理粘包分包问题,这里参数 buffer 一定是定长为 4 的业务数据
64-
receivedBuffer = buffer;
65-
return Task.CompletedTask;
66-
}
60+
DataPackageHandler = new FixLengthDataPackageHandler(4)
61+
};
62+
client.SetDataPackageAdapter(adapter, buffer =>
63+
{
64+
// buffer 即是接收到的数据
65+
return ValueTask.CompletedTask;
6766
});
6867

6968
// 连接远端节点 连接成功后自动开始接收数据
@@ -78,8 +77,36 @@ private async Task CreateClient()
7877
<li><code>DelimiterDataPackageHandler</code> <b>分隔符数据处理器</b> 即通讯包以特定一个或一组字节分割</li>
7978
</ul>
8079

81-
<p class="code-label">5. 数据适配器(设计中)</p>
80+
<p class="code-label">5. 数据适配器</p>
8281

8382
<p>在我们实际应用中,接收到数据包后(已经过数据处理器)大多情况下是需要将电文转化为应用中的具体数据类型 <code>Class</code> 或 <code>Struct</code>。将原始数据包转化为类或者结构体的过程由我们的数据适配器来实现</p>
8483

8584
<p>数据适配器设计思路如下</p>
85+
86+
<ol class="ul-demo">
87+
<li>使用 <code>SocketDataConverterAttribute</code> 标签约定通讯数据使用那个转换类型进行转换 指定类型需继承 <code>ISocketDataConverter</code>
88+
接口
89+
</li>
90+
<li>使用 <code>SocketDataPropertyAttribute</code> 标签约定如何转换数据类型 (Property) 属性值</li>
91+
</ol>
92+
93+
<Pre>[SocketDataConverter(Type = typeof(SocketDataConverter&lt;MockEntity&gt;))]
94+
class MockEntity
95+
{
96+
[SocketDataProperty(Type = typeof(byte[]), Offset = 0, Length = 5)]
97+
public byte[]? Header { get; set; }
98+
99+
[SocketDataProperty(Type = typeof(byte[]), Offset = 5, Length = 2)]
100+
public byte[]? Body { get; set; }
101+
102+
[SocketDataProperty(Type = typeof(Foo), Offset = 7, Length = 1, ConverterType = typeof(FooConverter), ConverterParameters = ["test"])]
103+
public string? Value1 { get; set; }
104+
}</Pre>
105+
106+
<Pre>class FooConverter(string name) : ISocketDataPropertyConverter
107+
{
108+
public object? Convert(ReadOnlyMemory&lt;byte&gt; data)
109+
{
110+
return new Foo() { Id = data.Span[0], Name = name };
111+
}
112+
}</Pre>

src/BootstrapBlazor.Server/Components/Samples/Sockets/Adapters.razor

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@
4141
</ul>
4242
<p>本示例服务器端模拟了数据分包即响应数据实际是两次写入所以实际接收端是要通过两次接收才能得到一个完整的响应数据包,可通过 <b>数据适配器</b> 来简化接收逻辑。通过切换下方 <b>是否使用数据适配器</b> 控制开关进行测试查看实际数据接收情况。</p>
4343
<ul class="ul-demo">
44-
<li>不使用 <b>数据处理器</b> 要分两次接收才能接收完整</li>
45-
<li>使用 <b>数据处理器</b> 一次即可接收完整数据包</li>
44+
<li>不使用 <b>数据适配器</b> 要分两次接收才能接收完整</li>
45+
<li>使用 <b>数据适配器</b> 一次即可接收完整数据包</li>
4646
</ul>
4747
<Pre>private readonly DataPackageAdapter _dataAdapter = new()
4848
{

src/BootstrapBlazor.Server/Components/Samples/Sockets/Adapters.razor.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,10 @@ protected override void OnInitialized()
4848
});
4949
_client.ReceivedCallBack += OnReceivedAsync;
5050

51-
_dataAdapter.ReceivedCallBack += async Data =>
51+
_dataAdapter.ReceivedCallBack += async data =>
5252
{
5353
// 直接处理接收的数据
54-
await UpdateReceiveLog(Data);
54+
await UpdateReceiveLog(data);
5555
};
5656
}
5757

@@ -104,7 +104,7 @@ private async ValueTask OnReceivedAsync(ReadOnlyMemory<byte> data)
104104

105105
private async Task UpdateReceiveLog(ReadOnlyMemory<byte> data)
106106
{
107-
var payload = System.Text.Encoding.UTF8.GetString(data.Span);
107+
var payload = Encoding.UTF8.GetString(data.Span);
108108
var body = BitConverter.ToString(data.ToArray());
109109

110110
_items.Add(new ConsoleMessageItem

src/BootstrapBlazor.Server/Components/Samples/Sockets/DataEntities.razor

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
Name="Normal" ShowCode="false">
1010
<p>通过 <code>SocketDataConverterAttribute</code> 类标签与 <code>SocketDataPropertyAttribute</code>
1111
属性标签可以将通讯数据自动转化为我们系统中需要的业务实体类,示例如下:</p>
12-
<Pre>[SocketDataConverter(Type = typeof(MockEntitySocketDataConverter))]
12+
<Pre>[SocketDataConverter(Type = typeof(SocketDataConverter&lt;MockEntity&gt;))]
1313
class MockEntity
1414
{
1515
[SocketDataProperty(Type = typeof(byte[]), Offset = 0, Length = 5)]
@@ -26,8 +26,7 @@ class MockEntity
2626
}</Pre>
2727
<p class="code-label">1. <code>SocketDataConverter</code> 参数说明:</p>
2828
<ul class="ul-demo">
29-
<li><b>Type</b>: 自定义转换器类型,组件库内置了 <code>SocketDataConverterBase</code> 泛型基类,继承后非常方便扩展出自己的转换器,重载
30-
<code>TryConvertTo</code> 方法调用基类的 <code>Parse</code> 基本就完成了 99% 的工作量,也可以完全自己解析通讯电文到实体类的各个属性上
29+
<li><b>Type</b>: 自定义转换器类型,组件库内置了 <code>SocketDataConverter</code> 泛型类,建议看一下源码非常方便扩展出自己的转换器
3130
</li>
3231
</ul>
3332
<Pre>class MockEntitySocketDataConverter : SocketDataConverterBase&lt;MockEntity&gt;
@@ -96,7 +95,7 @@ class MockEntity
9695
<li><code>SocketDataUInt64LittleEndianConverter</code> 转成 ulong 无符号整形小端读取</li>
9796
</ul>
9897
<p>自定义数据类型转化器示例</p>
99-
<Pre>[SocketDataConverter(Type = typeof(MockEntitySocketDataConverter))]
98+
<Pre>[SocketDataConverter(Type = typeof(SocketDataConverter&lt;MockEntity&gt;))]
10099
class MockEntity
101100
{
102101
[SocketDataProperty(Type = typeof(byte[]), Offset = 0, Length = 5)]
@@ -107,9 +106,8 @@ class MockEntity
107106

108107
[SocketDataProperty(Type = typeof(Foo), Offset = 7, Length = 1, ConverterType = typeof(FooConverter), ConverterParameters = ["test"])]
109108
public string? Value1 { get; set; }
110-
}
111-
112-
class FooConverter(string name) : ISocketDataPropertyConverter
109+
}</Pre>
110+
<Pre>class FooConverter(string name) : ISocketDataPropertyConverter
113111
{
114112
public object? Convert(ReadOnlyMemory&lt;byte&gt; data)
115113
{

src/BootstrapBlazor.Server/Locales/zh-CN.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4839,7 +4839,7 @@
48394839
"SocketComponents": "Socket 服务",
48404840
"SocketAutoReceive": "自动接收数据",
48414841
"SocketManualReceive": "手动接收数据",
4842-
"DataPackageAdapter": "数据处理器",
4842+
"DataPackageAdapter": "数据适配器",
48434843
"SocketAutoConnect": "自动重连",
48444844
"SocketDataEntity": "通讯数据转实体类",
48454845
"NetworkMonitor": "网络状态 NetworkMonitor"

0 commit comments

Comments
 (0)