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()); } } }
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); } } }