@@ -12,37 +12,29 @@ public partial class UdpConnection
1212
1313 private const byte fragment_header_size = sizeof ( byte ) + sizeof ( ushort ) + sizeof ( int ) + sizeof ( byte ) + sizeof ( ushort ) ;
1414
15- private async Task FragmentedSend ( byte [ ] _buffer )
15+ private async Task FragmentedSend ( MessageWriter _writer )
1616 {
1717 var fragment_size = MTU - fragment_header_size ;
1818
1919 var fragment_id = ( byte ) Interlocked . Increment ( ref last_fragment_id_allocated ) ;
2020
21- var fragments_count = ( int ) ( ( _buffer . Length / ( double ) fragment_size ) + 1 ) ;
21+ var fragments_count = ( int ) ( ( _writer . Buffer . Length / ( double ) fragment_size ) + 1 ) ;
2222
2323 for ( ushort i = 0 ; i < fragments_count ; i ++ )
2424 {
25- var data_length = Math . Min ( fragment_size , _buffer . Length - fragment_size * i ) ;
26- var fragment_buffer = new byte [ data_length + fragment_header_size ] ;
25+ var data_length = Math . Min ( fragment_size , _writer . Buffer . Length - fragment_size * i ) ;
26+ var fragment_writer = MessageWriter . Get ( ) ;
27+ //var fragment_buffer = new byte[data_length + fragment_header_size];
2728
28- fragment_buffer [ 0 ] = UdpSendOptionInternal . Fragment ;
29+ fragment_writer . Write ( UdpSendOptionInternal . Fragment ) ;
2930
30- AttachReliableID ( fragment_buffer , 1 ) ;
31+ AttachReliableID ( fragment_writer , 1 ) ;
3132
32- fragment_buffer [ 3 ] = ( byte ) fragments_count ;
33- fragment_buffer [ 4 ] = ( byte ) ( fragments_count >> 8 ) ;
34- fragment_buffer [ 5 ] = ( byte ) ( fragments_count >> 16 ) ;
35- fragment_buffer [ 6 ] = ( byte ) ( fragments_count >> 24 ) ;
33+ fragment_writer . Write ( fragments_count ) ;
34+ fragment_writer . Write ( fragment_id ) ;
35+ fragment_writer . Write ( i ) ;
3636
37- fragment_buffer [ 7 ] = fragment_id ;
38-
39- // Add fragment sequence index
40- fragment_buffer [ 8 ] = ( byte ) i ;
41- fragment_buffer [ 9 ] = ( byte ) ( i >> 8 ) ;
42-
43- Array . Copy ( _buffer , fragment_size * i , fragment_buffer , fragment_header_size , data_length ) ;
44-
45- await WriteBytesToConnection ( fragment_buffer , fragment_buffer . Length ) ;
37+ await WriteBytesToConnection ( fragment_writer ) . ConfigureAwait ( false ) ;
4638 }
4739
4840 if ( last_fragment_id_allocated >= byte . MaxValue )
0 commit comments