Modified WebSocket.cs, Ext.cs

This commit is contained in:
sta 2013-05-14 02:00:18 +09:00
parent ee3746cc03
commit 4fa05f928b
42 changed files with 93 additions and 55 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1096,7 +1096,8 @@ namespace WebSocketSharp {
} }
/// <summary> /// <summary>
/// Reads a block of bytes from the specified stream and returns the read data in an array of <see cref="byte"/>. /// Reads a block of bytes from the specified <see cref="Stream"/>
/// and returns the read data in an array of <see cref="byte"/>.
/// </summary> /// </summary>
/// <returns> /// <returns>
/// An array of <see cref="byte"/> that receives the read data. /// An array of <see cref="byte"/> that receives the read data.
@ -1114,6 +1115,18 @@ namespace WebSocketSharp {
var buffer = new byte[length]; var buffer = new byte[length];
var readLen = stream.Read(buffer, 0, length); var readLen = stream.Read(buffer, 0, length);
if (readLen <= 0)
return new byte[]{};
var tmpLen = 0;
while (readLen < length)
{
tmpLen = stream.Read(buffer, readLen, length - readLen);
if (tmpLen <= 0)
break;
readLen += tmpLen;
}
return readLen == length return readLen == length
? buffer ? buffer
@ -1140,7 +1153,8 @@ namespace WebSocketSharp {
} }
/// <summary> /// <summary>
/// Reads a block of bytes from the specified stream and returns the read data in an array of <see cref="byte"/>. /// Reads a block of bytes from the specified <see cref="Stream"/>
/// and returns the read data in an array of <see cref="byte"/>.
/// </summary> /// </summary>
/// <returns> /// <returns>
/// An array of <see cref="byte"/> that receives the read data. /// An array of <see cref="byte"/> that receives the read data.
@ -1164,32 +1178,51 @@ namespace WebSocketSharp {
var count = length / bufferLength; var count = length / bufferLength;
var rem = length % bufferLength; var rem = length % bufferLength;
var readData = new List<byte>(); if (count == 0)
var readBuffer = new byte[bufferLength]; return stream.ReadBytes((int)rem);
long readLen = 0;
var tmpLen = 0;
Action<byte[]> read = (buffer) => using (var readData = new MemoryStream())
{ {
tmpLen = stream.Read(buffer, 0, buffer.Length); var readLen = 0;
if (tmpLen > 0) var bufferLen = 0;
var tmpLen = 0;
Func<byte[], bool> read = buffer =>
{ {
bufferLen = buffer.Length;
readLen = stream.Read(buffer, 0, bufferLen);
if (readLen <= 0)
return false;
while (readLen < bufferLen)
{
tmpLen = stream.Read(buffer, readLen, bufferLen - readLen);
if (tmpLen <= 0)
break;
readLen += tmpLen; readLen += tmpLen;
readData.AddRange(buffer.SubArray(0, tmpLen));
} }
readData.Write(buffer, 0, readLen);
return readLen == bufferLen;
}; };
count.Times(() => var readBuffer = new byte[bufferLength];
var cont = true;
for (long i = 0; i < count; i++)
{ {
read(readBuffer); if (!read(readBuffer))
}); {
cont = false;
break;
}
}
if (rem > 0) if (cont && rem > 0)
read(new byte[rem]); read(new byte[rem]);
return readLen > 0 readData.Close();
? readData.ToArray() return readData.ToArray();
: new byte[]{}; }
} }
/// <summary> /// <summary>

View File

@ -1196,13 +1196,26 @@ namespace WebSocketSharp {
var compressed = false; var compressed = false;
try try
{ {
if (_readyState != WsState.OPEN)
{
onError("The WebSocket connection isn't established or has been closed.");
return;
}
if (_compression != CompressionMethod.NONE) if (_compression != CompressionMethod.NONE)
{ {
data = data.Compress(_compression); data = data.Compress(_compression);
compressed = true; compressed = true;
} }
send(opcode, data, compressed); var length = data.Length;
lock (_forSend)
{
if (length <= _fragmentLen)
send(Fin.FINAL, opcode, data.ReadBytes((int)length), compressed);
else
sendFragmented(opcode, data, compressed);
}
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -1217,24 +1230,6 @@ namespace WebSocketSharp {
} }
} }
private void send(Opcode opcode, Stream stream, bool compressed)
{
lock (_forSend)
{
if (_readyState != WsState.OPEN)
{
onError("The WebSocket connection isn't established or has been closed.");
return;
}
var length = stream.Length;
if (length <= _fragmentLen)
send(Fin.FINAL, opcode, stream.ReadBytes((int)length), compressed);
else
sendFragmented(opcode, stream, compressed);
}
}
private bool send(Fin fin, Opcode opcode, byte[] data, bool compressed) private bool send(Fin fin, Opcode opcode, byte[] data, bool compressed)
{ {
var frame = createFrame(fin, opcode, new PayloadData(data), compressed, _client); var frame = createFrame(fin, opcode, new PayloadData(data), compressed, _client);

View File

@ -402,7 +402,8 @@
</member> </member>
<member name="M:WebSocketSharp.Ext.ReadBytes(System.IO.Stream,System.Int32)"> <member name="M:WebSocketSharp.Ext.ReadBytes(System.IO.Stream,System.Int32)">
<summary> <summary>
Reads a block of bytes from the specified stream and returns the read data in an array of <see cref="T:System.Byte" />. Reads a block of bytes from the specified <see cref="T:System.IO.Stream" />
and returns the read data in an array of <see cref="T:System.Byte" />.
</summary> </summary>
<returns> <returns>
An array of <see cref="T:System.Byte" /> that receives the read data. An array of <see cref="T:System.Byte" /> that receives the read data.
@ -430,7 +431,8 @@
</member> </member>
<member name="M:WebSocketSharp.Ext.ReadBytes(System.IO.Stream,System.Int64,System.Int32)"> <member name="M:WebSocketSharp.Ext.ReadBytes(System.IO.Stream,System.Int64,System.Int32)">
<summary> <summary>
Reads a block of bytes from the specified stream and returns the read data in an array of <see cref="T:System.Byte" />. Reads a block of bytes from the specified <see cref="T:System.IO.Stream" />
and returns the read data in an array of <see cref="T:System.Byte" />.
</summary> </summary>
<returns> <returns>
An array of <see cref="T:System.Byte" /> that receives the read data. An array of <see cref="T:System.Byte" /> that receives the read data.

View File

@ -533,7 +533,8 @@
<b> <b>
<a href="#M:WebSocketSharp.Ext.ReadBytes(System.IO.Stream,System.Int32)">ReadBytes</a> <a href="#M:WebSocketSharp.Ext.ReadBytes(System.IO.Stream,System.Int32)">ReadBytes</a>
</b>(<i>this</i> <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.IO.Stream">System.IO.Stream</a>, <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.Int32">int</a>)<nobr> : <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.Byte">byte</a>[]</nobr><blockquote> </b>(<i>this</i> <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.IO.Stream">System.IO.Stream</a>, <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.Int32">int</a>)<nobr> : <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.Byte">byte</a>[]</nobr><blockquote>
Reads a block of bytes from the specified stream and returns the read data in an array of <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.Byte">byte</a>. Reads a block of bytes from the specified <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.IO.Stream">System.IO.Stream</a>
and returns the read data in an array of <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.Byte">byte</a>.
</blockquote></td> </blockquote></td>
</tr> </tr>
<tr valign="top"> <tr valign="top">
@ -555,7 +556,8 @@
<b> <b>
<a href="#M:WebSocketSharp.Ext.ReadBytes(System.IO.Stream,System.Int64,System.Int32)">ReadBytes</a> <a href="#M:WebSocketSharp.Ext.ReadBytes(System.IO.Stream,System.Int64,System.Int32)">ReadBytes</a>
</b>(<i>this</i> <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.IO.Stream">System.IO.Stream</a>, <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.Int64">long</a>, <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.Int32">int</a>)<nobr> : <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.Byte">byte</a>[]</nobr><blockquote> </b>(<i>this</i> <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.IO.Stream">System.IO.Stream</a>, <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.Int64">long</a>, <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.Int32">int</a>)<nobr> : <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.Byte">byte</a>[]</nobr><blockquote>
Reads a block of bytes from the specified stream and returns the read data in an array of <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.Byte">byte</a>. Reads a block of bytes from the specified <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.IO.Stream">System.IO.Stream</a>
and returns the read data in an array of <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.Byte">byte</a>.
</blockquote></td> </blockquote></td>
</tr> </tr>
<tr valign="top"> <tr valign="top">
@ -1822,7 +1824,8 @@
<h3 id="M:WebSocketSharp.Ext.ReadBytes(System.IO.Stream,System.Int32)">ReadBytes Method</h3> <h3 id="M:WebSocketSharp.Ext.ReadBytes(System.IO.Stream,System.Int32)">ReadBytes Method</h3>
<blockquote id="M:WebSocketSharp.Ext.ReadBytes(System.IO.Stream,System.Int32):member"> <blockquote id="M:WebSocketSharp.Ext.ReadBytes(System.IO.Stream,System.Int32):member">
<p class="Summary"> <p class="Summary">
Reads a block of bytes from the specified stream and returns the read data in an array of <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.Byte">byte</a>. Reads a block of bytes from the specified <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.IO.Stream">System.IO.Stream</a>
and returns the read data in an array of <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.Byte">byte</a>.
</p> </p>
<h2>Syntax</h2> <h2>Syntax</h2>
<div class="Signature">public static <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.Byte">byte</a>[] <b>ReadBytes</b> (<i>this</i> <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.IO.Stream">System.IO.Stream</a> stream, <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.Int32">int</a> length)</div> <div class="Signature">public static <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.Byte">byte</a>[] <b>ReadBytes</b> (<i>this</i> <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.IO.Stream">System.IO.Stream</a> stream, <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.Int32">int</a> length)</div>
@ -1896,7 +1899,8 @@
<h3 id="M:WebSocketSharp.Ext.ReadBytes(System.IO.Stream,System.Int64,System.Int32)">ReadBytes Method</h3> <h3 id="M:WebSocketSharp.Ext.ReadBytes(System.IO.Stream,System.Int64,System.Int32)">ReadBytes Method</h3>
<blockquote id="M:WebSocketSharp.Ext.ReadBytes(System.IO.Stream,System.Int64,System.Int32):member"> <blockquote id="M:WebSocketSharp.Ext.ReadBytes(System.IO.Stream,System.Int64,System.Int32):member">
<p class="Summary"> <p class="Summary">
Reads a block of bytes from the specified stream and returns the read data in an array of <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.Byte">byte</a>. Reads a block of bytes from the specified <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.IO.Stream">System.IO.Stream</a>
and returns the read data in an array of <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.Byte">byte</a>.
</p> </p>
<h2>Syntax</h2> <h2>Syntax</h2>
<div class="Signature">public static <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.Byte">byte</a>[] <b>ReadBytes</b> (<i>this</i> <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.IO.Stream">System.IO.Stream</a> stream, <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.Int64">long</a> length, <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.Int32">int</a> bufferLength)</div> <div class="Signature">public static <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.Byte">byte</a>[] <b>ReadBytes</b> (<i>this</i> <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.IO.Stream">System.IO.Stream</a> stream, <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.Int64">long</a> length, <a href="http://www.go-mono.com/docs/monodoc.ashx?link=T:System.Int32">int</a> bufferLength)</div>

View File

@ -771,7 +771,8 @@
An <see cref="T:System.Int32" /> that contains the number of bytes to read. An <see cref="T:System.Int32" /> that contains the number of bytes to read.
</param> </param>
<summary> <summary>
Reads a block of bytes from the specified stream and returns the read data in an array of <see cref="T:System.Byte" />. Reads a block of bytes from the specified <see cref="T:System.IO.Stream" />
and returns the read data in an array of <see cref="T:System.Byte" />.
</summary> </summary>
<returns> <returns>
An array of <see cref="T:System.Byte" /> that receives the read data. An array of <see cref="T:System.Byte" /> that receives the read data.
@ -829,7 +830,8 @@
An <see cref="T:System.Int32" /> that contains the buffer size in bytes of each internal read. An <see cref="T:System.Int32" /> that contains the buffer size in bytes of each internal read.
</param> </param>
<summary> <summary>
Reads a block of bytes from the specified stream and returns the read data in an array of <see cref="T:System.Byte" />. Reads a block of bytes from the specified <see cref="T:System.IO.Stream" />
and returns the read data in an array of <see cref="T:System.Byte" />.
</summary> </summary>
<returns> <returns>
An array of <see cref="T:System.Byte" /> that receives the read data. An array of <see cref="T:System.Byte" /> that receives the read data.

View File

@ -1,6 +1,6 @@
<Overview> <Overview>
<Assemblies> <Assemblies>
<Assembly Name="websocket-sharp" Version="1.0.2.41223"> <Assembly Name="websocket-sharp" Version="1.0.2.3113">
<AssemblyPublicKey>[00 24 00 00 04 80 00 00 94 00 00 00 06 02 00 00 00 24 00 00 52 53 41 31 00 04 00 00 11 00 00 00 29 17 fb 89 fe c3 91 f7 2b cb 8b e2 61 d2 3f 05 93 6d 65 a8 9e 63 72 a6 f5 d5 2c f2 9d 20 fa 0b c0 70 6a f6 88 7e 8b 90 3f 39 f5 76 c8 48 e0 bb 7b b2 7b ed d3 10 a7 1a 0f 70 98 0f 7f f4 4b 53 09 d2 a5 ef 36 c3 56 b4 aa f0 91 72 63 25 07 89 e0 93 3e 3f 2e f2 b9 73 0e 12 15 5d 43 56 c3 f4 70 a5 89 fe f7 f6 ac 3e 77 c2 d8 d0 84 91 f4 0c d1 f3 8e dc c3 c3 b8 38 3d 0c bf 17 de 20 78 c1 ]</AssemblyPublicKey> <AssemblyPublicKey>[00 24 00 00 04 80 00 00 94 00 00 00 06 02 00 00 00 24 00 00 52 53 41 31 00 04 00 00 11 00 00 00 29 17 fb 89 fe c3 91 f7 2b cb 8b e2 61 d2 3f 05 93 6d 65 a8 9e 63 72 a6 f5 d5 2c f2 9d 20 fa 0b c0 70 6a f6 88 7e 8b 90 3f 39 f5 76 c8 48 e0 bb 7b b2 7b ed d3 10 a7 1a 0f 70 98 0f 7f f4 4b 53 09 d2 a5 ef 36 c3 56 b4 aa f0 91 72 63 25 07 89 e0 93 3e 3f 2e f2 b9 73 0e 12 15 5d 43 56 c3 f4 70 a5 89 fe f7 f6 ac 3e 77 c2 d8 d0 84 91 f4 0c d1 f3 8e dc c3 c3 b8 38 3d 0c bf 17 de 20 78 c1 ]</AssemblyPublicKey>
<Attributes> <Attributes>
<Attribute> <Attribute>
@ -866,7 +866,8 @@
An <see cref="T:System.Int32" /> that contains the number of bytes to read. An <see cref="T:System.Int32" /> that contains the number of bytes to read.
</param> </param>
<summary> <summary>
Reads a block of bytes from the specified stream and returns the read data in an array of <see cref="T:System.Byte" />. Reads a block of bytes from the specified <see cref="T:System.IO.Stream" />
and returns the read data in an array of <see cref="T:System.Byte" />.
</summary> </summary>
</Docs> </Docs>
<Link Type="WebSocketSharp.Ext" Member="M:WebSocketSharp.Ext.ReadBytes(System.IO.Stream,System.Int32)" /> <Link Type="WebSocketSharp.Ext" Member="M:WebSocketSharp.Ext.ReadBytes(System.IO.Stream,System.Int32)" />
@ -928,7 +929,8 @@
An <see cref="T:System.Int32" /> that contains the buffer size in bytes of each internal read. An <see cref="T:System.Int32" /> that contains the buffer size in bytes of each internal read.
</param> </param>
<summary> <summary>
Reads a block of bytes from the specified stream and returns the read data in an array of <see cref="T:System.Byte" />. Reads a block of bytes from the specified <see cref="T:System.IO.Stream" />
and returns the read data in an array of <see cref="T:System.Byte" />.
</summary> </summary>
</Docs> </Docs>
<Link Type="WebSocketSharp.Ext" Member="M:WebSocketSharp.Ext.ReadBytes(System.IO.Stream,System.Int64,System.Int32)" /> <Link Type="WebSocketSharp.Ext" Member="M:WebSocketSharp.Ext.ReadBytes(System.IO.Stream,System.Int64,System.Int32)" />