@@ -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,60 @@ 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 ( [ 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+ receivedBuffer = Memory < byte > . Empty ;
302+ tcs = new TaskCompletionSource ( ) ;
303+ await tcs . Task ;
304+
305+ // 验证接收到的数据
306+ Assert . Equal ( receivedBuffer . ToArray ( ) , [ 5 , 6 , 0x13 , 0x10 ] ) ;
307+
308+ // 关闭连接
309+ client . Close ( ) ;
310+ StopTcpServer ( server ) ;
311+
312+ var handler = new DelimiterDataPackageHandler ( "\r \n " ) ;
313+ var ex = Assert . Throws < ArgumentNullException > ( ( ) => new DelimiterDataPackageHandler ( string . Empty ) ) ;
314+ Assert . NotNull ( ex ) ;
315+
316+ ex = Assert . Throws < ArgumentNullException > ( ( ) => new DelimiterDataPackageHandler ( ( byte [ ] ) null ! ) ) ;
317+ Assert . NotNull ( ex ) ;
318+ }
319+
266320 private static TcpListener StartTcpServer ( int port , Func < TcpClient , Task > handler )
267321 {
268322 var server = new TcpListener ( IPAddress . Loopback , port ) ;
@@ -280,6 +334,29 @@ private static async Task AcceptClientsAsync(TcpListener server, Func<TcpClient,
280334 }
281335 }
282336
337+ private static async Task MockDelimiterPackageAsync ( TcpClient client )
338+ {
339+ using var stream = client . GetStream ( ) ;
340+ while ( true )
341+ {
342+ var buffer = new byte [ 10240 ] ;
343+ var len = await stream . ReadAsync ( buffer ) ;
344+ if ( len == 0 )
345+ {
346+ break ;
347+ }
348+
349+ // 回写数据到客户端
350+ var block = new Memory < byte > ( buffer , 0 , len ) ;
351+ await stream . WriteAsync ( block , CancellationToken . None ) ;
352+
353+ await Task . Delay ( 20 ) ;
354+
355+ // 模拟拆包发送第二段数据
356+ await stream . WriteAsync ( new byte [ ] { 0x13 , 0x10 , 0x5 , 0x6 , 0x13 , 0x10 } , CancellationToken . None ) ;
357+ }
358+ }
359+
283360 private static async Task MockSplitPackageAsync ( TcpClient client )
284361 {
285362 using var stream = client . GetStream ( ) ;
0 commit comments