@@ -177,7 +177,7 @@ public async Task CloseByRemote_Ok()
177177 [ Fact ]
178178 public async Task FixLengthDataPackageHandler_Ok ( )
179179 {
180- var port = 8888 ;
180+ var port = 8884 ;
181181 var server = StartTcpServer ( port , MockSplitPackageAsync ) ;
182182 var client = CreateClient ( ) ;
183183
@@ -219,7 +219,7 @@ public async Task FixLengthDataPackageHandler_Ok()
219219 [ Fact ]
220220 public async Task FixLengthDataPackageHandler_Sticky ( )
221221 {
222- var port = 8899 ;
222+ var port = 8885 ;
223223 var server = StartTcpServer ( port , MockStickyPackageAsync ) ;
224224 var client = CreateClient ( ) ;
225225
@@ -263,6 +263,45 @@ public async Task FixLengthDataPackageHandler_Sticky()
263263 StopTcpServer ( server ) ;
264264 }
265265
266+ [ Fact ]
267+ public async Task DelimiterDataPackageHandler_Ok ( )
268+ {
269+ var port = 8886 ;
270+ var server = StartTcpServer ( port , MockDelimiterPackageAsync ) ;
271+ var client = CreateClient ( ) ;
272+
273+ // 连接 TCP Server
274+ var connect = await client . ConnectAsync ( "localhost" , port ) ;
275+
276+ var tcs = new TaskCompletionSource ( ) ;
277+ Memory < byte > receivedBuffer = Memory < byte > . Empty ;
278+
279+ // 增加数据库处理适配器
280+ client . SetDataHandler ( new DelimiterDataPackageHandler ( new byte [ ] { 0x13 , 0x10 } )
281+ {
282+ ReceivedCallBack = buffer =>
283+ {
284+ receivedBuffer = buffer ;
285+ tcs . SetResult ( ) ;
286+ return Task . CompletedTask ;
287+ }
288+ } ) ;
289+
290+ // 发送数据
291+ var data = new Memory < byte > ( [ 1 , 2 , 3 , 4 , 5 ] ) ;
292+ await client . SendAsync ( data ) ;
293+
294+ // 等待接收数据处理完成
295+ await tcs . Task ;
296+
297+ // 验证接收到的数据
298+ Assert . Equal ( receivedBuffer . ToArray ( ) , [ 1 , 2 , 3 , 4 , 5 , 0x13 , 0x10 ] ) ;
299+
300+ // 关闭连接
301+ client . Close ( ) ;
302+ StopTcpServer ( server ) ;
303+ }
304+
266305 private static TcpListener StartTcpServer ( int port , Func < TcpClient , Task > handler )
267306 {
268307 var server = new TcpListener ( IPAddress . Loopback , port ) ;
@@ -280,6 +319,27 @@ private static async Task AcceptClientsAsync(TcpListener server, Func<TcpClient,
280319 }
281320 }
282321
322+ private static async Task MockDelimiterPackageAsync ( TcpClient client )
323+ {
324+ using var stream = client . GetStream ( ) ;
325+ while ( true )
326+ {
327+ var buffer = new byte [ 10240 ] ;
328+ var len = await stream . ReadAsync ( buffer ) ;
329+ if ( len == 0 )
330+ {
331+ break ;
332+ }
333+
334+ // 回写数据到客户端
335+ var block = new Memory < byte > ( buffer , 0 , len ) ;
336+ await stream . WriteAsync ( block , CancellationToken . None ) ;
337+
338+ // 模拟拆包发送第二段数据
339+ await stream . WriteAsync ( new byte [ ] { 0x13 , 0x10 , 0x5 , 0x6 } , CancellationToken . None ) ;
340+ }
341+ }
342+
283343 private static async Task MockSplitPackageAsync ( TcpClient client )
284344 {
285345 using var stream = client . GetStream ( ) ;
0 commit comments