From 040e007da39236c364b1790003f2d82a34a6de90 Mon Sep 17 00:00:00 2001
From: xljiulang <366193849@qq.com>
Date: Sat, 2 Jan 2016 23:59:31 +0800
Subject: [PATCH] =?UTF-8?q?=E6=80=A7=E8=83=BD=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Net40/NetworkSocket/ByteRange.cs | 2 +-
Net40/NetworkSocket/Http/Result/FileResult.cs | 3 +-
Net40/NetworkSocket/IByteRange.cs | 7 ----
.../NetworkSocket/Internal/IocpTcpSession.cs | 41 ++++++-------------
Net40/NetworkSocket/Internal/SslTcpSession.cs | 32 +++++----------
5 files changed, 25 insertions(+), 60 deletions(-)
diff --git a/Net40/NetworkSocket/ByteRange.cs b/Net40/NetworkSocket/ByteRange.cs
index 741e2dd..4802db7 100644
--- a/Net40/NetworkSocket/ByteRange.cs
+++ b/Net40/NetworkSocket/ByteRange.cs
@@ -80,7 +80,7 @@ public ByteRange(byte[] buffer, int offset, int count)
///
/// 新的ByteRange大小
///
- public IEnumerable SplitBySize(int size)
+ public IEnumerable SplitBySize(int size)
{
if (size >= this.Count)
{
diff --git a/Net40/NetworkSocket/Http/Result/FileResult.cs b/Net40/NetworkSocket/Http/Result/FileResult.cs
index 72d3e30..bbfc5f2 100644
--- a/Net40/NetworkSocket/Http/Result/FileResult.cs
+++ b/Net40/NetworkSocket/Http/Result/FileResult.cs
@@ -60,17 +60,16 @@ public void ExecuteResult(HttpResponse response)
using (var stream = new FileStream(this.FileName, FileMode.Open, FileAccess.Read))
{
const int size = 8 * 1024;
+ var bytes = new byte[size];
var state = response.WriteHeader((int)stream.Length);
while (state == true)
{
- var bytes = new byte[size];
var length = stream.Read(bytes, 0, size);
if (length == 0)
{
break;
}
-
var content = new ByteRange(bytes, 0, length);
state = response.WriteContent(content);
}
diff --git a/Net40/NetworkSocket/IByteRange.cs b/Net40/NetworkSocket/IByteRange.cs
index 40466c4..554c492 100644
--- a/Net40/NetworkSocket/IByteRange.cs
+++ b/Net40/NetworkSocket/IByteRange.cs
@@ -24,12 +24,5 @@ public interface IByteRange
/// 获取字节数组
///
byte[] Buffer { get; }
-
- ///
- /// 分割为大小相等的ByteRange集合
- ///
- /// 新的ByteRange大小
- ///
- IEnumerable SplitBySize(int size);
}
}
diff --git a/Net40/NetworkSocket/Internal/IocpTcpSession.cs b/Net40/NetworkSocket/Internal/IocpTcpSession.cs
index 51ec06a..a7ef343 100644
--- a/Net40/NetworkSocket/Internal/IocpTcpSession.cs
+++ b/Net40/NetworkSocket/Internal/IocpTcpSession.cs
@@ -45,7 +45,6 @@ public IocpTcpSession()
{
this.sendArg.Completed += this.SendCompleted;
this.recvArg.Completed += this.RecvCompleted;
- BufferManager.SetBuffer(this.sendArg);
BufferManager.SetBuffer(this.recvArg);
}
@@ -131,34 +130,20 @@ public override void Send(IByteRange byteRange)
throw new SocketException((int)SocketError.NotConnected);
}
- var byteRanges = byteRange.SplitBySize(this.sendArg.Count);
- foreach (var range in byteRanges)
- {
- this.SendByteRange(range);
- }
- }
-
- ///
- /// 发送一个小于缓冲区的数据范围
- ///
- /// 数据范围
- private bool SendByteRange(IByteRange byteRange)
- {
// 如果发送过程已停止,则本次直接发送
if (Interlocked.CompareExchange(ref this.PendingSendCount, 1, 0) == 0)
{
- return this.TrySendByteRangeAsync(byteRange);
+ this.TrySendByteRangeAsync(byteRange);
}
-
- // 添加数据到缓存区
- this.PendingSendByteRanges.Enqueue(byteRange);
-
- // 如果发送过程已停止,则启动发送缓存中的数据
- if (Interlocked.Increment(ref this.PendingSendCount) == 1)
+ else
{
- return this.TrySendByteRangeAsync(null);
+ this.PendingSendByteRanges.Enqueue(byteRange);
+ // 如果发送过程已停止,则启动发送缓存中的数据
+ if (Interlocked.Increment(ref this.PendingSendCount) == 1)
+ {
+ this.TrySendByteRangeAsync(null);
+ }
}
- return true;
}
@@ -167,19 +152,17 @@ private bool SendByteRange(IByteRange byteRange)
/// 发送完成将触发SendCompleted方法
/// 数据范围,为null则从缓冲中区获取
///
- private bool TrySendByteRangeAsync(IByteRange byteRange)
+ private void TrySendByteRangeAsync(IByteRange byteRange)
{
if (byteRange == null && this.PendingSendByteRanges.TryDequeue(out byteRange) == false)
{
Interlocked.Exchange(ref this.PendingSendCount, 0);
- return false;
+ return;
}
- Buffer.BlockCopy(byteRange.Buffer, byteRange.Offset, this.sendArg.Buffer, this.sendArg.Offset, byteRange.Count);
- this.sendArg.SetBuffer(this.sendArg.Offset, byteRange.Count);
-
- return base.TryInvokeAction(() =>
+ base.TryInvokeAction(() =>
{
+ this.sendArg.SetBuffer(byteRange.Buffer, byteRange.Offset, byteRange.Count);
if (this.Socket.SendAsync(this.sendArg) == false)
{
this.SendCompleted(this.Socket, this.sendArg);
diff --git a/Net40/NetworkSocket/Internal/SslTcpSession.cs b/Net40/NetworkSocket/Internal/SslTcpSession.cs
index 052a10b..996a808 100644
--- a/Net40/NetworkSocket/Internal/SslTcpSession.cs
+++ b/Net40/NetworkSocket/Internal/SslTcpSession.cs
@@ -198,30 +198,20 @@ public override void Send(IByteRange byteRange)
throw new SocketException((int)SocketError.NotConnected);
}
- this.SendByteRange(byteRange);
- }
-
- ///
- /// 发送一个小于缓冲区的数据范围
- ///
- /// 数据范围
- private bool SendByteRange(IByteRange byteRange)
- {
// 如果发送过程已停止,则本次直接发送
if (Interlocked.CompareExchange(ref this.PendingSendCount, 1, 0) == 0)
{
- return this.TrySendByteRangeAsync(byteRange);
+ this.TrySendByteRangeAsync(byteRange);
}
-
- // 添加数据到缓存区
- this.PendingSendByteRanges.Enqueue(byteRange);
-
- // 如果发送过程已停止,则启动发送缓存中的数据
- if (Interlocked.Increment(ref this.PendingSendCount) == 1)
+ else
{
- return this.TrySendByteRangeAsync(null);
+ this.PendingSendByteRanges.Enqueue(byteRange);
+ // 如果发送过程已停止,则启动发送缓存中的数据
+ if (Interlocked.Increment(ref this.PendingSendCount) == 1)
+ {
+ this.TrySendByteRangeAsync(null);
+ }
}
- return true;
}
///
@@ -229,15 +219,15 @@ private bool SendByteRange(IByteRange byteRange)
/// 发送完成将触发SendCompleted方法
/// 数据范围,为null则从缓冲中区获取
///
- private bool TrySendByteRangeAsync(IByteRange byteRange)
+ private void TrySendByteRangeAsync(IByteRange byteRange)
{
if (byteRange == null && this.PendingSendByteRanges.TryDequeue(out byteRange) == false)
{
Interlocked.Exchange(ref this.PendingSendCount, 0);
- return false;
+ return;
}
- return base.TryInvokeAction(() =>
+ base.TryInvokeAction(() =>
this.sslStream.BeginWrite(
byteRange.Buffer,
byteRange.Offset,