44
55namespace SerializersBenchmark . Network ;
66
7- public sealed class Rabbit ( ISerializerTestAsync serializer , int port , bool useBufferedStream = false ) : IRabbit , ITcpClient
7+ public sealed class Rabbit : IRabbit , ITcpClient
88{
9- private readonly TcpClient _tcpClient = new ( ) ;
9+ private readonly TcpClient _tcpClient ;
1010 private NetworkStream _networkStream ;
11+ private readonly ISerializerTestAsync _serializer ;
12+ private readonly int _port ;
13+ private readonly bool _useBufferedStream ;
14+ public Rabbit ( ISerializerTestAsync serializer , int port , bool useBufferedStream = false ) {
15+ _serializer = serializer ;
16+ _port = port ;
17+ _useBufferedStream = useBufferedStream ;
18+ _tcpClient = new TcpClient ( ) ;
19+ _tcpClient . Client . NoDelay = true ; //disable Nagle's algorithm for low latency
20+ }
1121
12- public async Task ConnectAsync ( )
13- {
14- await _tcpClient . ConnectAsync ( "127.0.0.1" , port ) ;
22+ public async Task ConnectAsync ( ) {
23+ await _tcpClient . ConnectAsync ( "127.0.0.1" , _port ) ;
1524 _networkStream = _tcpClient . GetStream ( ) ;
1625 }
1726
1827 public async Task SendAsync ( object value , int repeatCount )
1928 {
2029 Stream stream = _networkStream ;
21- if ( useBufferedStream )
30+ if ( _useBufferedStream )
2231 {
2332 stream = new BufferedStream ( stream ) ;
2433 }
2534
2635 for ( var i = 0 ; i < repeatCount ; i ++ )
2736 {
28- await serializer . SerializeAsync ( value , stream ) . ConfigureAwait ( false ) ;
37+ await _serializer . SerializeAsync ( value , stream ) . ConfigureAwait ( false ) ;
2938 }
3039
3140 await _networkStream . FlushAsync ( ) . ConfigureAwait ( false ) ;
@@ -34,11 +43,11 @@ public async Task SendAsync(object value, int repeatCount)
3443 public async Task < object > ReceiveAsync ( int expectedSize )
3544 {
3645 Stream stream = new LimitedStreamReader ( _networkStream , expectedSize ) ;
37- if ( useBufferedStream )
46+ if ( _useBufferedStream )
3847 {
3948 stream = new BufferedStream ( stream ) ;
4049 }
41- return await serializer . DeserializeAsync ( stream ) . ConfigureAwait ( false ) ;
50+ return await _serializer . DeserializeAsync ( stream ) . ConfigureAwait ( false ) ;
4251 }
4352
4453 public void Dispose ( )
0 commit comments