@@ -450,6 +450,40 @@ public async Task DelimiterDataPackageHandler_Ok()
450450 Assert . NotNull ( ex ) ;
451451 }
452452
453+ [ Fact ]
454+ public async Task TryConvertTo_Ok ( )
455+ {
456+ var port = 8886 ;
457+ var server = StartTcpServer ( port , MockSplitPackageAsync ) ;
458+ var client = CreateClient ( ) ;
459+ var tcs = new TaskCompletionSource ( ) ;
460+ MockEntity ? entity = null ;
461+
462+ // 设置数据适配器
463+ var adapter = new MockEntityDataPackageAdapter
464+ {
465+ DataPackageHandler = new FixLengthDataPackageHandler ( 7 ) ,
466+ } ;
467+ client . SetDataPackageAdapter < MockEntity > ( adapter , t =>
468+ {
469+ entity = t ;
470+ tcs . SetResult ( ) ;
471+ return Task . CompletedTask ;
472+ } ) ;
473+
474+ // 连接 TCP Server
475+ var connect = await client . ConnectAsync ( "localhost" , port ) ;
476+
477+ // 发送数据
478+ var data = new ReadOnlyMemory < byte > ( [ 1 , 2 , 3 , 4 , 5 ] ) ;
479+ await client . SendAsync ( data ) ;
480+ await tcs . Task ;
481+
482+ Assert . NotNull ( entity ) ;
483+ Assert . Equal ( entity . Header , [ 1 , 2 , 3 , 4 , 5 ] ) ;
484+ Assert . Equal ( entity . Body , [ 3 , 4 ] ) ;
485+ }
486+
453487 private static TcpListener StartTcpServer ( int port , Func < TcpClient , Task > handler )
454488 {
455489 var server = new TcpListener ( IPAddress . Loopback , port ) ;
@@ -653,4 +687,24 @@ public async ValueTask<bool> SendAsync(ReadOnlyMemory<byte> data, CancellationTo
653687 return false ;
654688 }
655689 }
690+
691+ class MockEntityDataPackageAdapter : DataPackageAdapter
692+ {
693+ public override bool TryConvertTo ( ReadOnlyMemory < byte > data , [ NotNullWhen ( true ) ] out object ? entity )
694+ {
695+ entity = new MockEntity
696+ {
697+ Header = data [ ..5 ] . ToArray ( ) ,
698+ Body = data [ 5 ..] . ToArray ( )
699+ } ;
700+ return true ;
701+ }
702+ }
703+
704+ class MockEntity
705+ {
706+ public byte [ ] ? Header { get ; set ; }
707+
708+ public byte [ ] ? Body { get ; set ; }
709+ }
656710}
0 commit comments