Ejemplo n.º 1
0
 private void WriteLater(byte[] buffer, int offset, int size, TimeSpan timeout)
 {
     lock (this.ThisLock)
     {
         bool          flag          = this.pendingWriteSize == 0;
         TimeoutHelper timeoutHelper = new TimeoutHelper(timeout);
         while (size > 0)
         {
             if (size < this.writeBufferSize || this.pendingWriteSize != 0)
             {
                 if (this.writeBuffer == null)
                 {
                     this.writeBuffer = DiagnosticUtility.Utility.AllocateByteArray(this.writeBufferSize);
                 }
                 int num  = this.writeBufferSize - this.pendingWriteSize;
                 int num1 = size;
                 if (num1 > num)
                 {
                     num1 = num;
                 }
                 Buffer.BlockCopy(buffer, offset, this.writeBuffer, this.pendingWriteSize, num1);
                 Microsoft.ServiceBus.Channels.BufferedConnection bufferedConnection = this;
                 bufferedConnection.pendingWriteSize = bufferedConnection.pendingWriteSize + num1;
                 if (this.pendingWriteSize == this.writeBufferSize)
                 {
                     this.FlushCore(timeoutHelper.RemainingTime());
                     flag = true;
                 }
                 size   = size - num1;
                 offset = offset + num1;
             }
             else
             {
                 base.Connection.Write(buffer, offset, size, false, timeoutHelper.RemainingTime());
                 size = 0;
             }
         }
         if (this.pendingWriteSize <= 0)
         {
             this.CancelFlushTimer();
         }
         else if (flag)
         {
             this.SetFlushTimer();
             this.pendingTimeout = TimeoutHelper.Add(this.pendingTimeout, timeoutHelper.RemainingTime());
         }
     }
 }
Ejemplo n.º 2
0
 private void WriteNow(byte[] buffer, int offset, int size, TimeSpan timeout, BufferManager bufferManager)
 {
     lock (this.ThisLock)
     {
         if (this.pendingWriteSize > 0)
         {
             int num = this.writeBufferSize - this.pendingWriteSize;
             this.CancelFlushTimer();
             if (size > num)
             {
                 TimeoutHelper timeoutHelper = new TimeoutHelper(timeout);
                 this.FlushCore(timeoutHelper.RemainingTime());
                 timeout = timeoutHelper.RemainingTime();
             }
             else
             {
                 Buffer.BlockCopy(buffer, offset, this.writeBuffer, this.pendingWriteSize, size);
                 if (bufferManager != null)
                 {
                     bufferManager.ReturnBuffer(buffer);
                 }
                 Microsoft.ServiceBus.Channels.BufferedConnection bufferedConnection = this;
                 bufferedConnection.pendingWriteSize = bufferedConnection.pendingWriteSize + size;
                 this.FlushCore(timeout);
                 return;
             }
         }
         if (bufferManager != null)
         {
             base.Connection.Write(buffer, offset, size, true, timeout, bufferManager);
         }
         else
         {
             base.Connection.Write(buffer, offset, size, true, timeout);
         }
     }
 }