@@ -58,9 +58,9 @@ private async Task writePackageBuffer(Stream stream,PipeReader currentReader, Qp
5858
5959 var readRet = await writeCompressPipe . Reader . ReadAsync ( ) . ConfigureAwait ( false ) ;
6060 packageBodyBuffer = readRet . Buffer ;
61- var packageBodyLength = Convert . ToInt32 ( packageBodyBuffer . Length ) ;
61+
6262 //包总长度
63- packageTotalLength = PACKAGE_TOTAL_LENGTH_LENGTH + packageBodyLength ;
63+ packageTotalLength + = PACKAGE_TOTAL_LENGTH_LENGTH ;
6464 //准备包头
6565 writePackageTotalLengthToBuffer ( sendHeadBuffer , 0 , packageTotalLength ) ;
6666 packageHeadMemory = new Memory < byte > ( sendHeadBuffer , 0 , PACKAGE_TOTAL_LENGTH_LENGTH ) ;
@@ -105,21 +105,24 @@ private async Task writePackageBuffer(Stream stream,PipeReader currentReader, Qp
105105 finnalInLength = 1 ;
106106 }
107107 var finalData = dec . TransformFinalBlock ( encryptBuffer1 , 0 , finnalInLength ) ;
108- finalData . CopyTo ( encryptPipe . Writer . GetMemory ( finalData . Length ) ) ;
109- encryptPipe . Writer . Advance ( finalData . Length ) ;
110- packageTotalLength += finalData . Length ;
108+ if ( finalData . Length > 0 )
109+ {
110+ finalData . CopyTo ( encryptPipe . Writer . GetMemory ( finalData . Length ) ) ;
111+ encryptPipe . Writer . Advance ( finalData . Length ) ;
112+ packageTotalLength += finalData . Length ;
113+ }
111114 }
112115 _ = Task . Run ( async ( ) =>
113116 {
114- await encryptPipe . Writer . FlushAsync ( ) . ConfigureAwait ( false ) ;
115- currentReader . AdvanceTo ( packageBodyBuffer . End ) ;
117+ await encryptPipe . Writer . FlushAsync ( ) . ConfigureAwait ( false ) ;
116118 } ) ;
117119
118120 var readRet = await encryptPipe . Reader . ReadAtLeastAsync ( packageTotalLength ) . ConfigureAwait ( false ) ;
121+ currentReader . AdvanceTo ( packageBodyBuffer . End ) ;
122+
119123 packageBodyBuffer = readRet . Buffer ;
120- var packageBodyLength = Convert . ToInt32 ( packageBodyBuffer . Length ) ;
121124 //包总长度
122- packageTotalLength = PACKAGE_TOTAL_LENGTH_LENGTH + packageBodyLength ;
125+ packageTotalLength + = PACKAGE_TOTAL_LENGTH_LENGTH ;
123126 //准备包头
124127 writePackageTotalLengthToBuffer ( sendHeadBuffer , 0 , packageTotalLength ) ;
125128 packageHeadMemory = new Memory < byte > ( sendHeadBuffer , 0 , PACKAGE_TOTAL_LENGTH_LENGTH ) ;
@@ -191,7 +194,7 @@ private async Task writePackageAsync(Func<PipeWriter, Task<Tuple<QpPackageType,
191194 {
192195 if ( options . EnableNetstat )
193196 Interlocked . Increment ( ref PackageSendQueueCount ) ;
194- await sendLock . WaitAsync ( ) . ConfigureAwait ( false ) ;
197+ await sendLock . WaitAsync ( 5000 ) . ConfigureAwait ( false ) ;
195198 var stream = QpPackageHandler_Stream ;
196199 if ( stream == null )
197200 throw new IOException ( "Connection is disconnected." ) ;
@@ -203,22 +206,20 @@ private async Task writePackageAsync(Func<PipeWriter, Task<Tuple<QpPackageType,
203206
204207 if ( packageTotalLength < PACKAGE_HEAD_LENGTH )
205208 throw new IOException ( $ "包大小[{ packageTotalLength } ]小于包头长度[{ PACKAGE_HEAD_LENGTH } ]") ;
206- try
207- {
208- var readRet = await sendPipe . Reader . ReadAtLeastAsync ( packageBodyLength ) . ConfigureAwait ( false ) ;
209- var packageBuffer = readRet . Buffer ;
210- await writePackageBuffer ( stream ,
211- sendPipe . Reader ,
212- packageType ,
213- packageBuffer ,
214- afterSendHandler ) . ConfigureAwait ( false ) ;
215- lastSendPackageTime = DateTime . Now ;
216- }
217- catch ( Exception ex )
218- {
219- OnWriteError ( ex ) ;
220- throw ;
221- }
209+
210+ var readRet = await sendPipe . Reader . ReadAtLeastAsync ( packageBodyLength ) . ConfigureAwait ( false ) ;
211+ var packageBuffer = readRet . Buffer ;
212+ await writePackageBuffer ( stream ,
213+ sendPipe . Reader ,
214+ packageType ,
215+ packageBuffer ,
216+ afterSendHandler ) . ConfigureAwait ( false ) ;
217+ lastSendPackageTime = DateTime . Now ;
218+ }
219+ catch ( Exception ex )
220+ {
221+ OnWriteError ( ex ) ;
222+ throw ;
222223 }
223224 finally
224225 {
0 commit comments